【问题标题】:Format date string with .000Z into NSDate将带有 .000Z 的日期字符串格式化为 NSDate
【发布时间】:2017-05-26 17:37:06
【问题描述】:

我想将日期字符串格式化为 NSDate 对象,这听起来不是什么大事。

关键是,日期字符串在时区值中包含一个点,而不是加号或其他内容。日期如下所示:

2017-06-04T16:00:00.000Z

我尝试过像

这样的格式字符串
yyyy-MM-dd'T'HH:mm:ss.ZZZZ
yyyy-MM-dd'T'HH:mm:ss.ZZZ
yyyy-MM-dd'T'HH:mm:ss.Z

当然,我还在 nsdateformatter.com 上检查过它,它有效,但在 xCode 中 NSDate 始终为零。

【问题讨论】:

  • yyyy-MM-dd'T'HH:mm:ss.SSS'Z'??
  • @Larme 不要引用Z。那是时区。当您引用该字符串时,除非在日期格式化程序上设置了特定时区,否则该字符串将在本地时间进行解释。如果您不引用Z,则无需在格式化程序上设置特定时区,并且字符串会被正确解释。
  • @rmaddy Z 究竟是什么意思?你有什么我可以读到的参考资料吗?

标签: ios objective-c nsdate


【解决方案1】:

这对我有用

var str = "2017-06-04T16:00:00.000Z"
let formato = DateFormatter()
formato.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
formato.timeZone = NSTimeZone(name: "UTC")! as TimeZone
formato.formatterBehavior = .default
var data = formato.date(from: str)

【讨论】:

  • 格式化程序不需要设置时区。被解析的日期字符串中的Z 告诉日期格式化程序该字符串代表的时区。
【解决方案2】:

在 Objective-C 中

NSString *strValue = @"2017-06-04T16:00:00.000Z";
NSString *dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

// Or this if you like get in local time
NSString *dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

NSDateFormatter *dateFmtr = [[NSDateFormatter alloc] init];
[dateFmtr setDateFormat: dateFormat];

// You get a NSDate object
NSDate *dateValue = [dateFmtr dateFromString: strValue];

// Or NSString object
NSString *dateValue = [dateFmtr stringFromDate: dateValue];

不同字符串格式的其他变体。

// 2018-02-28T16:38:33.6873197-05:00
// If you have this string format you can use
NSString *strDate1 = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ";

有关复杂格式的更多信息,您可以查看模式 Date Format Patterns和苹果官方文档Preset Date and Time StylesDate Formatters

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,总是得到 nils & 作为解决方案,您可以从日期字符串中消除 .ZZZZ 部分

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    
    let dateString = openningTimeString.components(separatedBy: ".")[0]
    
    let myDate = dateFormatter.date(from: dateString)
    

    【讨论】:

    • 自己分解原始日期字符串的更好的解决方案是简单地使用正确的日期格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    相关资源
    最近更新 更多