Aller au contenu


Photo

Transformation de date en swift 3


  • Please log in to reply
11 réponses à ce sujet

#1 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 12 juillet 2017 - 12:23

Bonjour,

Je voudrais changer la présentation d'une date, voilà ce que j'ai : "03/11/2016" et je voudrais l' afficher comme çà : "3 Novembre 2016"

 

Est-ce qu'il y a une instruction pour cela (DateFormatter)?

 

et est-ce possible ?



#2 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 981 messages
  • LocationParis

Posté 12 juillet 2017 - 13:00

Voici la logique :

(NS)String <-- (NS)DateFormatter --> (NS)Date

Pour transformer ton (NS)String ("03/11/2016"), utilise un (NS)DateFormatter avec le dateFormat correspondant afin d'avoir une (NS)Date.

Ensuite, change le dateFormat pour avoir celui que tu veux (JourEnChiffres MoisEnToutesLettres AnnéeEnChiffres), puis transforme la (NS)Date précédente en (NS)String.

 

Pour le dateFormat, il faut se référer à la documentation.

 

Dans ton cas, le premier dateFormat sera dd/MM/yyyy. Je te laisse volontairement deviner le suivant (avec peut-être un problème de locale pour avoir le mois en français, mais ça reste du détail). Si la date a une ou deux heures de différence, c'est sûrement la timeZone (regarde le +0000 ou autre), ne t'en occupes pas si à quelques heures prêt, tu as la bonne date.
Pourquoi je ne te donne pas directement la solution ? Car pour voir autant de problèmes sur StackOverflow concernant les dates (et 49% des cas concernent la compréhension du dateFormat et ne pas y mettre n'importe quoi en croisant les doigts, 49% autres concernent les timezones/fuseaux horaires, et les 2% restant sont un peu plus complexes et variés) , je te laisse essayer de comprendre comment fonctionne le dateFormat, car une fois que c'est maîtrisé, pratiquement plus aucune date ne te posera problème.


  • Joanna Carter aime ceci
Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#3 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 804 messages
  • LocationParis

Posté 12 juillet 2017 - 13:50

Il parait qu’iOS 23 gère les fuseaux horaires martien, à la demande de Musk ..


  • iLandes aime ceci

Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#4 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 12 juillet 2017 - 14:34

désolé Larme, je n'y arrive pas, j'y suis depuis ce matin.

let dateString = "12/10/2017"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"

let res = dateFormatter.date(from: dateString)                   

j'ai fait çà avec un PlayGround

mais c'est ensuite que je ne suis plus dans le coup

 

il me faut transformer "res" en format "dd EEEE yyyy" donc ?



#5 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 12 juillet 2017 - 15:49

Je comprends comment cela se passe à partir de la "current Date"

var date = Date()

let dateFormatter = DateFormatter()

dateFormatter.dateStyle = .full
dateFormatter.timeStyle = .none

dateFormatter.locale = Locale(identifier: "fr-FR")
print (dateFormatter.string(from: date))                     // "mercredi 12 juillet 2017\n"

mais pas à partir d'une saisie de date quelconque



#6 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 981 messages
  • LocationParis

Posté 12 juillet 2017 - 17:21

Si cela t'embrouille de changer le dateFormat, tu peux créer un deuxième (NS)DateFormatter.

 

res est un objet de type (NS)Date, non ?

Bah, c'est bon alors, il suffit de faire comme avec la date courante.

 

Sinon, pour en revenir à ta question 

il me faut transformer "res" en format "dd EEEE yyyy" donc ?

 Tu y étais presque.

En relisant ma question juste au-dessus (res est un objet de type (NS)Date, non ?), il ne faut pas transformer res en format untel, il faut mettre ce dateFormat au (NS)DateFormatter et l'appeler pour transformer la (NS)Date en (NS)String


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#7 Magiic

Magiic

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 359 messages
  • LocationParis

Posté 12 juillet 2017 - 18:44

Il y a les styles pour les dates (comme pour les nombres, les unités, les distances etc.) qui permettent d'obtenir une date dans plusieurs styles différents. Ils devraient être privilégier avant d'utiliser dateFormat.



#8 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 12 juillet 2017 - 18:46

Cool Larme,

 

ça marche :

        let dateString = "171013"  // mon format de date en fichier (YYMMDD)
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale.init(identifier: "fr_Fr")
        dateFormatter.dateFormat = "yyMMdd"
        var res = dateFormatter.date(from: dateString)
        
        // 
        let dtformatter = DateFormatter()
        dtformatter.dateFormat = "EEEE dd MMMM yyyy"
        let dateDef = dtformatter.string(from: res!)
        print (dateDef)

------->      Affiche "vendredi 13 novembre 2017"

Merci, je continue 



#9 Stéphane MARTIN

Stéphane MARTIN

    Eleveur de cacaoyers

  • Membre
  • PipPip
  • 24 messages

Posté 28 juillet 2017 - 19:58

Bonsoir,

 

Je cherche a afficher la date au format "EEEE dd MMMM yyyy HH: MM" et en Français dans Label ?

import UIKit

class ViewController: UIViewController {
    
    
    @IBOutlet weak var LabelTime: UILabel!
    
    var CurrentDate = Date()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let french       = DateFormatter()
        french.dateStyle = .medium
        french.timeStyle = .medium
        french.locale    = Locale(identifier: "FR-fr")
      
        print(french.string(from:CurrentDate))
        
        
 let formatter = DateFormatter()

        
 formatter.dateFormat = " EEEE dd MMMM yyyy HH: MM"
 LabelTime.text = formatter.string(from: CurrentDate as Date)
        

    }
    
    
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
 


#10 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 29 juillet 2017 - 17:13

Il faut lire les docs sure DateFormatter :

class ViewController: UIViewController
{
  var disposable: Any?
  
  @IBOutlet weak var labelTime: UILabel!
  
  override func viewDidLoad()
  {
    super.viewDidLoad()
    
    let formatter = DateFormatter()
    
    formatter.locale = Locale(identifier: "FR-fr")
    
    formatter.dateFormat = "EEEE dd MMMM yyyy HH:mm"
    
    labelTime.text = formatter.string(from: Date())
  }
}


#11 helio

helio

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 231 messages

Posté 30 juillet 2017 - 10:30

En revanche je profite du sujet pour poser une question :

Comment fait-on si l'application est publiée également dans d'autres pays que la France pour que la date soit dans la langue de l'iPhone ?

à la place de : 

formatter.locale = Locale(identifier: "FR-fr")

que faut-il écrire ?

Merci.



#12 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 30 juillet 2017 - 15:31

formatter.locale = Locale.autoupdatingCurrent





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)