Удалить компонент времени из TimeInterval в Swift? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть компонент времени от Json.Я пытаюсь сгруппировать объекты в соответствии с их опубликованным временем.

У меня есть временной интервал, например 1540432146, который является двойным.

Я преобразую его в тип даты, используя

guard let timeInMilliseconds = lastUpdateOn as? Double else {return NSDate()}
    let timeInSeconds = timeInMilliseconds / 100000

    print(timeInSeconds)
    // get the Date
    let dateTime = NSDate(timeIntervalSince1970: timeInSeconds)

Следовательно, я получаю 2018-10-25 10:54:20.325076+0900 в качестве вывода.

Возможно ли удалить компонент Time этого и снова преобразовать тип Date обратно в TimeIntervalSincel1970, как я буду использовать его позже для сортировки моегоэлементы в массиве, и было бы проще сравнить Double

func getTime(lastUpdateOn:Any) -> NSDate{

    guard let timeInMilliseconds = lastUpdateOn as? Double else {return NSDate()}
    let timeInSeconds = timeInMilliseconds / 100000
    // get the Date
    let dateTime = NSDate(timeIntervalSince1970: timeInSeconds)

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"
    let datenew = dateFormatter.string(from: dateTime as Date)

    let newDate = dateFormatter.date(from: datenew)
     print(newDate)
    return dateTime
}

Это функция, которую я пробовал, но она всегда возвращает значение (1970-06-27 15:00:00 +0000).Что я делаю не так?

1 Ответ

0 голосов
/ 25 октября 2018

Если ваша единственная цель - сравнить разные даты, чтобы увидеть, какая из них стоит первой, просто конвертируйте временные метки Int Unix из JSON в Date объекты с:

let aDate = Date(timeIntervalSince1970: Double(timestamp)/1000.0)

Вы можете сравнить Dateобъекты напрямую, используя >, =, < и т. д., и результат будет сравнивать даты с точностью до миллисекунды.

Вы также можете напрямую сравнивать свои метки времени Unix, и результаты будут идентичны сравнению меток времени, которые вы конвертировали в Date объекты.

Если вы хотите сравнивать объекты Date простомесяц / день / год, его сложнее.

Какао Date ВСЕГДА представляет собой момент времени во всем мире.Внутренне он представлен в виде количества секунд с момента «даты эпохи» iOS (полночь 1 января 2001 года в UTC). Unix использует другую дату эпохи, но использует «timeIntervalSince1970», и его варианты позволяют работать с объектами Cocoa Date.и даты эпохи Unix.

Не существует такой вещи, как дата "без компонента времени".Есть несколько способов «нормализовать» свои даты: вы можете преобразовать дату в дату строка , которая имеет только месяц / день / год;вы можете принудительно установить значения всех дат ровно в полночь их месяца / дня / года в заданном часовом поясе, или вы можете извлечь месяц / день / год DateComponents из вашего Date.(Поиск по "DateComponents" в справочной системе Xcode, а также поиск по "DateComponents" в справочнике по классу Calendar, так как многие функции, позволяющие выполнять вычисления на Dates и DateComponents, предоставляются Calendar класс.)

Обратите внимание, что день / месяц / год, на который попадает цифровая временная метка Unix, часто отличается в зависимости от вашего часового пояса.Прямо сейчас в 22:47 по восточному поясному времени 24 октября здесь, в пригороде округа Колумбия.Я только что вычислил метку времени Unix для текущего времени и получил 1540435644000. В Японии 1540435644000 - 25 октября.(С моей точки зрения, это уже завтра в Японии).Таким образом, 2 отметки времени Unix могут быть в тот же день / месяц / год в Японии, но в другой день / месяц / год, где я живу, или наоборот.

...