在objective-c中,以下代码使用 date
API生成UTC日期时间信息 .
NSDate *currentUTCDate = [NSDate date]
然而,在Swift中,
let date = NSDate.date()
导致当地日期和时间 .
我有两个问题:
-
如何在
NSDate
对象中获取UTC时间和当地时间(以及date
给出当地时间) . -
如何从
NSDate
对象获得秒的精度 .
编辑1:感谢所有输入,但我不是在寻找 NSDateFormatter
对象或字符串值 . 我只是在寻找NSDate对象(但是我们将它们煮熟,但这是要求) .
见第1点 .
9 回答
文档说
date
方法返回一个新的日期设置为当前日期和时间,无论使用何种语言 .该问题可能位于您使用
NSDateFormatter
呈现日期的某个位置 .NSDate
只是时间线上的一个点 . 在谈论NSDate
时没有时区 . 我做了一个测试 .斯威夫特
输出:
2014-07-23 17:56:45 +0000
Objective-C
输出:
2014-07-23 17:58:15 +0000
结果 - No difference.
NSDate
是特定时间点 without a time zone . 将其视为自参考日期以来经过的秒数 . 自特定参考日期以来,一个时区与另一个时区相比过了多少秒? The answer is the same.根据您日期(包括查看调试器)的方式,您可能会在不同的时区获得答案 .
如果它们在同一时刻运行,它们的值是相同的 . 它们都是自参考日期以来的秒数,其格式为 on output 格式为UTC或当地时间 . 在日期变量中,它们都是UTC .
Objective-C的:
迅速:
为了解释这一点,我们可以在游乐场中使用NSDateFormatter:
日期输出会有所不同,但日期不变 . 这正是你所知道的本地NSDate之类的东西 .
至于如何获得微秒,你可以使用它(把它放在同一个游乐场的底部):
要比较两个日期,您可以使用
date.compare(otherDate)
.Xcode 9 • Swift 4 (也适用于Swift 3.x)
游乐场测试
这可能有助于您格式化日期:
日期与任何时区无关,因此请使用Dateformatter并附加时区进行显示:
迅速:
objC:
此代码以UTC格式给出日期 . 如果您需要当地时间,则应使用时区调用以下扩展名为
Timezone.current
对于UTC时间,请使用它:
Date().currentUTCTimeZoneDate
目前(对Swift的最新更改),
NSDate.date()
不再可用 .相反,您只需要初始化
NSDate
并获取当前日期和时间 .在游乐场尝试一下:
你会得到:
Swift 3
您可以根据UTC的当前时区获取日期
像这样打电话:
我的Xcode版本6.1.1(6A2008a)
在操场上,测试如下:
我找到了一种在Swift4中获取UTC的简便方法 . 把这段代码放在操场上