Дата () возвращает час более 24 - PullRequest
0 голосов
/ 12 мая 2018

Мне нужно отправить дату с моего 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 голосов
/ 12 мая 2018

Чтобы отправить дату на сервер, вы должны использовать метку времени 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, форматер может вернуть nil при работе с 24-форматным форматом на устройствах с установленным 12-часовым форматом и наоборот.

Источник: Технические вопросы и ответы QA1480

0 голосов
/ 12 мая 2018

Попробуйте получить текущую дату и время, как это в Swift.

let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
let result = formatter.string(from: date)
self.backS.sendLocation(msg: "data fetched \(result)")

Ваш результат будет таким.

"2018-05-12 14:34:51 +0000"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...