【问题标题】:incorrect string to date conversion swift 3.0错误的字符串到日期转换 swift 3.0
【发布时间】:2018-05-20 19:50:26
【问题描述】:

我正在将字符串中的 10/24 12:00 PM 等格式转换为日期格式的等效格式。我正在使用以下代码:

let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MM/dd hh:mm aa"

   self.dateCompleted = dateFormatter.date(from: self.DeliverBy!)

dateCompleted 是一个 Date 变量,而 self.DeliveryBy 是一个 String 变量。

我得到类似 2000-10-24 17:00:00 UTC 的输出,而它应该是类似 2017-10-24 12:00:00 UTC 的输出。我是不是做错了什么?

我推荐了http://userguide.icu-project.org/formatparse/datetime

【问题讨论】:

  • DateFormatter 假定为当地时间,除非另有说明。因此,假设您住在美国东部标准时间(UTC -5),那么看到 17:00:00 UTC 是非常有意义的。

标签: swift nsdateformatter


【解决方案1】:

您的日期字符串未指定 年份, 因此 从默认日期确定。您可以做的是设置 默认日期为当天(开始):

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd hh:mm aa"
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
if let dateCompleted = dateFormatter.date(from: "10/24 12:00 PM") {
    print(dateCompleted) // 2017-10-24 10:00:00 +0000
}

(我在欧洲/柏林时区,因此打印的是 12:00 PM 格林威治标准时间 10:00。)

【讨论】:

  • 2017-10-24 17:00:00 +0000 我仍然得到不正确的时间戳
  • @Ackman:请注意,日期没有时区,并且始终以 GMT 打印。您所在时区的“12:00 PM”是 GMT 时区的 17:00,因此结果是正确的。另请参阅stackoverflow.com/questions/39937019/…。
【解决方案2】:

您可以将当前日期信息加载到 DateFormatter 中:

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "MM/dd hh:mm aa"

dateFormatter.defaultDate = Date() // start with the current date

self.dateCompleted = dateFormatter.date(from: self.DeliverBy!)

【讨论】:

  • 10/24 12:00 PM ----->Deliveryby 2017-10-24 17:00:56 +0000----->dateCompleted 为什么会有时差?跨度>
猜你喜欢
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多