【问题标题】:Issue in formatting Date in swift 4swift 4中格式化日期的问题
【发布时间】:2020-08-11 08:24:08
【问题描述】:

我在 swift 4 中格式化日期时遇到问题 格式化源代码时HH:mm:ss获取错误数据的时间如下。

    let dateFormatter : DateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss a
    let date = Date()
    let dateString = dateFormatter.string(from: date)

我得到的结果是:2020 年 8 月 11 日下午 12:01:23

如果我试图将字符串日期的结果转换为日期

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss a" 
    let serverDate: Date = dateFormatter.date(from: dateString)! 

我得到的结果是:2020-08-11 06:31:39 +0000

预计必须是:2020-08-11 12:01:23 +0000
但我得到的结果是:2020-08-11 06:31:39 +0000

如果有人知道解决方案,请给我一个解决方案。

【问题讨论】:

  • HHa,这是一种奇怪的格式。您是否处于与 UTC 有 5h30 差异的时区,比如印度?因为这是我最强烈的怀疑。
  • 是的,我来自印度,@Larme 有什么解决方案

标签: ios swift datetime swift4.2 dateformatter


【解决方案1】:

HH:mm:ss 以 24 小时格式为您提供时间,因此 a 在该格式中没有意义。或者你可以使用hh:mm:ss a

Date() 为您提供UTC 的时间。您需要提供时区信息才能获取您所在时区的日期。

    let date = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss"
    dateFormatter.timeZone = .current
    let localDate = dateFormatter.string(from: date)
    
    print(localDate)

localDate 会给你当前时区的日期。

【讨论】:

    【解决方案2】:

    问题在于您的格式。如果您尝试使用 dateFormat = "dd-MMM-yyyy HH:mm:ss",您将获得预期的结果。另外,我建议您设置 localetimezone。例如:

    let dateFormatter: DateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.timeZone = NSTimeZone.local
    dateFormatter.dateFormat = "dd-MMM-yyyy HH:mm:ss"
    let date = Date()
    let dateString = dateFormatter.string(from: date)
    
    let serverDate: Date = dateFormatter.date(from: dateString)!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多