swift - 12 小时格式时间字符串中的日期时间不正确 - Swift

标签 swift date time nsdateformatter

我有以下 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 ,但对我来说没有任何作用。如果有人有解决方案,请帮助我。谢谢!

最佳答案

我检查了 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 = TimeZone(abbreviation: "GMT+0:00")
    formatter.dateFormat = format
    //formatter.timeZone = TimeZone.current //or autoupdatingCurrent
    return formatter .date(from: self)
}}

关于swift - 12 小时格式时间字符串中的日期时间不正确 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41178408/

相关文章:

ios - Swift 视频缩放器 AVAsset

ios - 用于错误处理的 swift 中的 Guard 语句

json - 如何使用来自 Alamofire 的 JSON 数据填充表格 View ?

python - 如何格式化 Twitter(和其他)时间戳?

java - 对应 MySQL 数据类型为 Java Date()

time - 具有相同 GMT 偏移量的时区是否有任何不同?

ios - 如何使用 RxSwift 让 ViewController 观察 ViewModel 变量(Variable<..>)的任何变化?

java - 在 Java 中获取特定时间段后的日期

c++ - time.h 在 C++ 中工作而不在 C 中工作

python - 如何确定过去的时区特定日期是否在 python 中是夏令时?