String Datum als NSDate

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • String Datum als NSDate

    Hallo zusammen,

    versuche gerade ein String Datum in NSDate umzuwandeln:

    C-Quellcode

    1. let dateAsString = "03.06.2015 00:00:00"
    2. let formatter = NSDateFormatter.new()
    3. formatter.dateFormat = "dd.MM.yyyy HH:mm:ss"
    4. let date = formatter.dateFromString(dateAsString)
    5. println(date!)
    Als Resulat erscheint allerdings: 2015-06-02 22:00:00 +0000
    Erwartet habe ich allerdings: 2015-06-03 00:00:00 +0000

    Woran liegt das? :/
  • Das +0000 am Ende ist die Zeitverschiebung vom GMT/UTC. Mit der Sommerzeit sind das genau die zwei Stunden, die dir fehlen. ;)

    BTW: Der NSDateFormatter hatte (zumindest früher) ein Speicherleck, wenn man kein Locale gesetzt hat. Deswegen sollte man immer ein Locale setzen.
    „Meine Komplikation hatte eine Komplikation.“
  • so?

    C-Quellcode

    1. let dateAsString = "03.06.2015 00:00:00"
    2. let formatter = NSDateFormatter.new()
    3. formatter.dateFormat = "dd.MM.yyyy HH:mm:ss"
    4. formatter.locale = NSLocale(localeIdentifier: "de_DE")
    5. let date = formatter.dateFromString(dateAsString)
    6. println(date!)
    Wenn ja, hat sich am Resulat leider nichts geändert :(

    @macmoonshine.
    bedeutet das also, dass das Resulat so wie es angezeigt wird, richtig ist?
  • ja so ist die Anzeige perfekt.
    wenn ich jetzt eine locale notification "registrien" möchte mit Hilfe dieses NSDate.

    nehme ich dann das Datum wo die 2h Abweichung sind oder das richtige?
    ich kann mir die Antwort von der logik eigentlich selber geben - aber lieber mal nachfragen :)
  • Ghost108 schrieb:

    ich kann mir die Antwort von der logik eigentlich selber geben - aber lieber mal nachfragen :)
    oder einfach mal ausprobieren? ;)

    Benutze doch einfach ein bisschen Playground, dann wirst du vieles selbst herausfinden und bist so nicht viel von den Antworten anderer abhängig ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AlexMq ()

  • playground und locale notifications ist so ne sache ...
    aber bin schon am testen :)

    Klappt mit dem richtigen Datum super.
    Danke :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ghost108 ()

  • Lösung:

    C-Quellcode

    1. let heute = NSDate()
    2. let damals = NSCalendar.currentCalendar().dateByAddingUnit(
    3. .CalendarUnitDay,
    4. value: -2,
    5. toDate: heute,
    6. options: NSCalendarOptions(0))
  • gritsch schrieb:

    nein, besser ist man verwendet das locale (dd.MM.yyyy vs dd/MM/yyyy vs MM/dd/yyyy etc)
    also würde es funktionieren, nur wäre es besser, wenn man die locale benutzt? ;)
    ich sitz an einem windowsrechern, kann es (wie oben schon mal erwähnt) nicht testen und wollte eigentlich nur mal auf die altebewährte technik des "einfach mal ausprobieren" hinweisen.
    War aber wohl nicht genug Zaun, mit dem ich gewunken habe ;)
  • AlexMq schrieb:

    gritsch schrieb:

    nein, besser ist man verwendet das locale (dd.MM.yyyy vs dd/MM/yyyy vs MM/dd/yyyy etc)
    also würde es funktionieren, nur wäre es besser, wenn man die locale benutzt? ;)
    naja, wenn du eine app schreibst die nur deutsche und österreicher verwenden welche die landestypischen regionaleinstellungen verwenden, so kommt es aufs gleiche raus.
    der italiener verwendet aber eben nicht den punkt als trennzeichen sondern den slash und der amerikaner verwendet auch den slash, jedoch kommt dort noch zusätzlich das monat als erster teil und dann erst als zweiter teil der tag.
    im prinzip kann die "hardcodete" version falsch sein. wie viele verschiedene datumsformate es noch gibt weiß ich nicht - is auch egal weil ich im prinzip nur wissen muss dass es verschiedene gibt und man deshalb das system das datum formatieren lassen sollte welches ja weiß wie es der user gerne hätte. man sagt dem system also wie lang das ergebnis sein soll (lang, mittel, kurz) und was man haben will (datum + uhrzeit oder nur datum oder nur uhrzeit).