【问题标题】:Time stamp from string issue?字符串问题的时间戳?
【发布时间】:2018-09-18 14:32:23
【问题描述】:

我有两个字符串,日期和时间。日期字符串具有格式为 "MM-dd-yyyy" 的日期和格式为 "hh:mm a" 的时间,我想创建一个 10 位数的时间戳。我做了以下事情,但我遇到了这个问题。任何帮助表示赞赏。

let idate = (userInstance.userData?.Date!)! + "T" + (userInstance.userData?.Time!)!  + "+0000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from: idate)!
print(date)

let timestamp = Int(date.timeIntervalSince1970)
print(timestamp)

【问题讨论】:

  • “我对此有意见”是什么意思?
  • 其崩溃的 bcoz idate 无法转换
  • 能否请您发布崩溃日志?
  • 我的问题是我的约会中有上午和下午。但我尝试给 yyyy-MM-dd'T'HH:mm a:ssZ
  • 您需要显示实际输入、实际期望输出和崩溃日志。

标签: swift locale unix-timestamp


【解决方案1】:

您不能将包含 AM/PM 时间的日期强制为 ISO 8601。ISO 8601 日期始终以 24 小时模式表示。
除了您的年月日顺序不符合 ISO 8601 标准。

指定适当的日期格式MM-dd-yyyyhh:mm aZ

let datePart = "09-18-2018"
let timePart = "4:22 pm"

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MM-dd-yyyyhh:mm aZ"
let date = dateFormatter.date(from: datePart + timePart + "+0000")!
let timestamp = Int(date.timeIntervalSince1970)
print(timestamp)

【讨论】:

  • 此答案假定您希望以 UTC 时间戳处理日期和时间。 OP没有澄清,但很可能它是一个本地时间戳。如果是这种情况,请不要将Z 添加到格式中,也不要将+0000 附加到字符串中。
【解决方案2】:

你在这里崩溃了:

let date = dateFormatter.date(from: idate)!

那是因为您声称idate 是这种格式的字符串:

"yyyy-MM-dd'T'HH:mm:ssZ"

但事实并非如此。当您从字符串转换为日期时,您的格式字符串必须完全匹配字符串的格式。

然后您可以提供不同的格式并将日期转换为新字符串。

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2011-08-18
    • 2012-01-25
    • 2015-01-09
    • 2011-05-23
    • 2021-08-04
    相关资源
    最近更新 更多