将 12 位数字刻度转换为日期
Converting 12 digit ticks to Date
我正在尝试转换 12 位 C# 日期时间刻度格式的时间。 (648000000000)。在以下 link 的帮助下,我为我的代码添加了一个扩展 .
extension Date {
init(ticks: UInt64) {
self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
}
}
let date = Date(ticks: 648000000000)
当我尝试查看结果日期时,它打印如下;
0001-01-03 18:00:00 +0000
但是,当我尝试将其转换为小时和分钟格式时,输出与 19:55
无关
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.string(from: date)
我的第一个问题是如何将其格式化为仅 18:00。第二个是为什么当我只打印日期时它打印 18:00,但是当我格式化它时它打印 19:55?
只是不要减去62_135_596_800
extension Date {
init(ticks: UInt64) {
self.init(timeIntervalSince1970: Double(ticks)/10_000_000)
}
}
1970-01-01 18:00:00 +0000
另一个问题:当您创建 date
并打印它时,该字符串被格式化为 UTC 时区(偏移 GMT+0)。但 DateFormatter
returns 字符串表示取决于其时区,默认为本地时区。
您只需将 dateFormatter
的 timeZone
设置为 UTC
即可修复您的代码
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
18:00
显然,您的时间戳表示 持续时间 作为 100 纳秒刻度的数量,而不是日期。如果将数字除以 10^7,则得到秒数。这些可以打印为带有 DateComponentsFormatter
.
的持续时间
示例:
let ticks = 648000000000
let seconds = TimeInterval(ticks) / 10_000_000
let fmt = DateComponentsFormatter()
fmt.allowedUnits = [.hour, .minute]
print(fmt.string(from: seconds)!)
18:00
持续时间为 64800 = 18 * 60 * 60 秒,正好是 18 小时。
我正在尝试转换 12 位 C# 日期时间刻度格式的时间。 (648000000000)。在以下 link 的帮助下,我为我的代码添加了一个扩展
extension Date {
init(ticks: UInt64) {
self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
}
}
let date = Date(ticks: 648000000000)
当我尝试查看结果日期时,它打印如下;
0001-01-03 18:00:00 +0000
但是,当我尝试将其转换为小时和分钟格式时,输出与 19:55
无关let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.string(from: date)
我的第一个问题是如何将其格式化为仅 18:00。第二个是为什么当我只打印日期时它打印 18:00,但是当我格式化它时它打印 19:55?
只是不要减去62_135_596_800
extension Date {
init(ticks: UInt64) {
self.init(timeIntervalSince1970: Double(ticks)/10_000_000)
}
}
1970-01-01 18:00:00 +0000
另一个问题:当您创建 date
并打印它时,该字符串被格式化为 UTC 时区(偏移 GMT+0)。但 DateFormatter
returns 字符串表示取决于其时区,默认为本地时区。
您只需将 dateFormatter
的 timeZone
设置为 UTC
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
18:00
显然,您的时间戳表示 持续时间 作为 100 纳秒刻度的数量,而不是日期。如果将数字除以 10^7,则得到秒数。这些可以打印为带有 DateComponentsFormatter
.
示例:
let ticks = 648000000000
let seconds = TimeInterval(ticks) / 10_000_000
let fmt = DateComponentsFormatter()
fmt.allowedUnits = [.hour, .minute]
print(fmt.string(from: seconds)!)
18:00
持续时间为 64800 = 18 * 60 * 60 秒,正好是 18 小时。