2016-02-02 1 views
0

Итак, я смотрел еще один вопрос здесь, и крест на этом:Дата-Строка -> Нарушение строковой даты?

У меня есть расширение для NSDate

extension NSDate { 
    private class var formatter : NSDateFormatter { 
     let nsDateFormatter = NSDateFormatter() 
     nsDateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ" 
     nsDateFormatter.locale = NSLocale.currentLocale() 
     return nsDateFormatter 
    } 
    //NSString to NSDate 
    public convenience init(dateString:String) { 
     let dateObj = NSDate.formatter.dateFromString(dateString)! 
     self.init(timeInterval: 0, sinceDate: dateObj) 
    } 

    //NSDate to String 
    public func getString() -> String { 
     return NSDate.formatter.stringFromDate(self) 
    } 
} 

Это работает просто отлично:

var date = NSDate()      //"Feb 2, 2016, 12:36 PM" 
var string = date.getString()    //"2016-02-02 12:36:11 -0500" 

let copyDate = NSDate(dateString: string) //"Feb 2, 2016, 12:36 PM" 
copyDate.getString()      //"2016-02-02 12:36:11 -0500" 

Но если я использую, например:

"EEE, d MMM YYYY HH: мм: сс ZZZ" как DateFormat:

var date = NSDate()      //"Feb 2, 2016, 12:58 PM" 
var string = date.getString()    //"Tue, 2 Feb 2016 12:58:48 GMT-5" 

let copyDate = NSDate(dateString: string) //"Dec 22, 2015, 12:58 PM" 
copyDate.getString()      //"Tue, 22 Dec 2015 12:58:48 GMT-5" 

Почему это происходит?

Он не должен работать в соответствии с предыдущим случаем?

Почему у меня есть несколько дней и даже месяц срыва?

+0

Там нет никакой разницы, я уже пробовал. –

+0

@LeoDabus Я нахожусь на своем iMac, с открытой площадкой для этого, поверьте мне, я уже пробовал это. –

+2

ГГГГ в прописных буквах (в большинстве случаев) * не *, что вы хотите, см., Например, http://stackoverflow.com/questions/15133549/difference-between-yyyy-and-yyyy-in-nsdateformatter. –

ответ

1

Вы используете capital Y for year instead of y.

Год (в календаре «Неделя года»). В этом году обозначение используется в календарном году ISO год, как определено ISO 8601, но может использоваться в календарных системах, не связанных с григорианцами, где желательна обработка даты недели. Может не всегда быть той же ценностью, что и календарный год.

Изменить формат для "EEE, d MMM yyyy HH:mm:ss zzz"

Вы можете прочитать больше о ISO дня недели здесь: https://en.wikipedia.org/wiki/ISO_week_date

+0

Да, это трюк. Это происходит только с годами? –

+0

Нет других параметров форматирования в указанной мне форме формата даты. Например, 'D' - день года, а не день месяца. – Joe

+0

, даже если это правильный способ сделать это. Почему это не удается? NSDateFormatter одинаковый для обоих, он не должен возвращать одни и те же данные? –

Смежные вопросы