ios - 格式化日期时的奇怪行为

标签 ios swift date nsdateformatter

我从 json 中获取日期的字符串表示形式,如下所示:

let dateString = "2016-12-31T00:10:00+01:00"

为了将它建模为 Date 对象,我使用了一个日期格式化程序,如下所示:

let dateForm = DateFormatter()
dateForm.locale = Locale(identifier: "fr_FR")
dateForm.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
dateForm.timeZone = TimeZone.current

当我把它变成一个日期时,我的 Playground 输出是正确的:

let date = dateForm.date(from: dateString)

=> 输出:“2016 年 12 月 31 日,12:10 AM”

但是如果我尝试打印这个完全相同的对象(日期),我会得到以下输出:

print(date!)

=> 输出:“2016-12-30 23:10:00 +0000\n”

我的问题是:我如何确定我正在处理正确的日期(我所说的正确是指我的本地时区 (GMT+01))?

最佳答案

当您打印日期输出 2016-12-30 23:10:00 +0000 并且您的 GMT 是 +00:00 但是当您从日期获取字符串时,它将根据您给定的格式返回字符串和您的 Locale (fr_FR) 输出 2016-12-31T00:10:00+01:00 并且您的格林威治标准时间是 +01:00 如果你想从字符串中约会,那么

日期输出 = 您的字符串日期 -(您的 GMT)

你的情况

2016-12-30 23:10:00 = 2016-12-31 00:10:00 - (+01:00)

关于ios - 格式化日期时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177554/

相关文章:

iphone - xcode 中的工具栏和后退按钮问题

swift - 添加文本字段 MDCAlertController IOS

ios - 无法在iOS Swift中使用类型为json的参数列表调用append

r - 如何将日期转换为最近的周末(星期六)

使用自动布局时,iOS 必须额外留出 20px 的边距以与 Root View 对齐吗?

ios - respondsToSelector 到 id 类型对象

ios - XCTest POST API性能测试

javascript - 如何在javascript中计算周和月的日期范围?

java - java中 'EST'时区的两个日期之间的差异

ios - 应用程序在iOS 10及更早版本上使用 “Could not instantiate class named _UIScrollViewLayoutGuide”崩溃