【问题标题】:Incorrect time in Date from 12-Hr format Time String - Swift12小时格式时间字符串中的日期时间不正确 - Swift
【发布时间】:2017-05-01 21:31:29
【问题描述】:

我有以下字符串作为 12 小时格式时间:

let timeFrom = "05:30 AM";
let timeTo = "04:35 PM";

并尝试从中获取日期以进行比较,如下所示:

let openTime = timeFrom.date(format: "hh:mm a")
let closeTime = timeTo.date(format: "hh:mm a")

有了这个扩展:

extension String
{
    func date(format:String) -> Date?
    {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        formatter.timeZone = NSTimeZone.local
        return formatter .date(from: self)
    }
}

当我打印 openTime 和 closeTime 时,我得到的时间值不正确:

print(openTime)      // 2000-01-01 00:00:00 +0000
print(closeTime)     // 2000-01-01 11:00:00 +0000

为什么会这样?我认为这与时区有关,所以我访问了NSDateFormatter return wrong date + Swift,但对我没有任何帮助。如果有人有解决方案,请帮助我。谢谢!

【问题讨论】:

  • 找出“hh”和“HH”之间的区别。
  • 哎呀..应该有'hh'。感谢您指出@el Tomato。检查...
  • @rmaddy:我问过字符串到日期的时间不正确。重复链接是关于字符串到字符串的格式。您必须正确看待这两个问题。
  • 您希望看到什么结果?

标签: swift date time nsdateformatter


【解决方案1】:

我使用 swift 3 和 Xcode 8 进行了一些小改动,请检查一下

 let timeFrom = "05:30 AM";
 let timeTo = "04:35 PM";
 let openTime = timeFrom.date(format: "hh:mm a")
 let closeTime = timeTo.date(format: "hh:mm a")

 print(openTime)
 print(closeTime)

并更改扩展名

extension String{
func date(format:String) -> Date?
{
    let formatter = DateFormatter()
    formatter.timeZone = NSTimeZone(abbreviation: "GMT+0:00") as TimeZone!
    formatter.dateFormat = format
    //formatter.timeZone = NSTimeZone.local
    return formatter .date(from: self)
}}

【讨论】:

  • 是的,我尝试仅将“GMT+0:00”更改为“GMT”,这很有效。谢谢!
  • @AkshayGajarlawar 如果工作,请接受我的回答,谢谢!
  • 我不明白原因,但这对我有用!!在寻找解决方案 4 小时后,我只能说非常感谢!!!
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多