【问题标题】:Date-String -> String-Date disruption? [duplicate]日期字符串 -> 字符串日期中断? [复制]
【发布时间】:2016-02-02 18:02:36
【问题描述】:

所以,我在这里寻找另一个问题,并提出这个问题:

我有一个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:mm:ss zzz" 作为日期格式:

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"

为什么会这样?

它不应该与前一种情况相同吗?

为什么我现在有几天甚至一个月的时间中断?

【问题讨论】:

  • 没有区别,我已经试过了。
  • @LeoDabus 我在我的 iMac 上,专门为此打开了一个操场,相信我,我已经尝试过了。
  • YYYY 大写字母是(在大多数情况下)不是你想要的,见例如stackoverflow.com/questions/15133549/….
  • 问题从这行开始let dateObj = NSDate.formatter.dateFromString(dateString)!

标签: ios swift swift2 nsdate nsdateformatter


【解决方案1】:

您正在使用capital Y for year instead of y

年份(在基于“一年中的一周”的日历中)。此年份指定用于 ISO 8601 定义的 ISO 年-周日历,但可用于需要处理周日期的非公历日历系统中。可能并不总是与日历年相同。

将格式改为"EEE, d MMM yyyy HH:mm:ss zzz"

您可以在此处阅读有关 ISO 星期日期的更多信息:https://en.wikipedia.org/wiki/ISO_week_date

【讨论】:

  • 是的,这成功了。这种情况只有几年才会发生?
  • 在我提供的日期格式链接中没有其他格式选项。例如,D 是一年中的一天而不是一个月中的一天。
  • 顺便说一句,即使这是正确的做法。为什么会失败?两者的 NSDateFormatter 相同,它不应该返回相同的数据吗?
  • 格式与预期不符。 ISO 周日期完全是另一回事,我不是专家。但要看到一致的结果,请使用预期的格式:"YYYY'W'wwe"
猜你喜欢
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
相关资源
最近更新 更多