Date()返回24小时

时间:2018-05-12 08:51:11

标签: ios swift date

我必须从我的iPhone通过我的应用程序向服务器发送日期,但我很惊讶日期在服务器中存储为NULL(并非总是),这是用于此的代码:

timeS = (Date().millisecondsSince1970)
// make some assertions on timeS
let date = Date(timeIntervalSince1970: timeS)
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.locale = NSLocale.current
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateString = dateFormatter.string(from: date)
return dateString

似乎服务器端的c#代码尝试将字符串转换为日期并且失败,因此它存储为NULL。

所以最近我尝试发送日期而不对字符串进行任何修改以查看发生了什么:

self.backS.sendLocation(msg: "data fitched \(Date())")

这就是我在数据库中找到的内容:

  

数据结算2018-05-08 77 :45:44 AM +0000

必须是:

  

数据结算2018-05-08 07 :45:44 AM +0000(因为那是服务器的时间)

我不知道为什么会发生这种情况!!

我非常感谢任何人的帮助,提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试在Swift中获取您当前的日期和时间。

Go To

你的结果会是这样的。

Type Declaration

答案 1 :(得分:0)

要将日期发送到服务器,您应该使用Unix时间戳,而不是字符串格式的日期。

但是,如果您坚持使用字符串,则应使用DateFormatter。使用DateFormatter时,您应始终设置格式化程序的locale属性。无论手机的区域设置如何,这都可以确保合作者返回一致的结果。

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
let dateString = formatter.string(from: Date())

在设置locale属性之前设置dateFormat属性非常重要。

如果未设置locale属性,格式化程序在设置12小时格式的设备上使用24格式时可能会返回nil,反之亦然。

来源:Technical Q&A QA1480