Twitter Api возвращает Inacurate 24 часа?Разбор в swift 4 - PullRequest
0 голосов
/ 31 мая 2018

Я получаю эти дурацкие временные метки из твиттера, используя там api, чтобы получить временную шкалу конкретного пользователя.

Thu May 31 16:43:37 +0000 2018

Эта отметка времени равна 9: 47Ам.Тем не менее, использование традиционных методов синтаксического анализа в течение 24 часов дает неточные результаты.Какой временной масштаб это и как я могу преобразовать это в обычное старое 12-часовое время, или timeIntervalSince1970, если это возможно.Спасибо!

Эта метка времени была получена из ответа json с использованием:

https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline

моя попытка разбора этого беспорядка:

   public func properFormattedTime(with twitterTime : String) -> String{

    let lowerBound = String.Index.init(encodedOffset: 0)
    let upperBound = String.Index.init(encodedOffset: 11)
    let range = lowerBound..<upperBound
    let newStr = String(twitterTime[range])
    print("test \(newStr)")

    let lowerBound1 = String.Index.init(encodedOffset: 11)
    let upperBound1 = String.Index.init(encodedOffset: 13)
    let range1 = lowerBound1..<upperBound1
    let timeStr = String(twitterTime[range1])

    let lowerBound2 = String.Index.init(encodedOffset: 13)
    let upperBound2 = String.Index.init(encodedOffset: 16)
    let range2 = lowerBound2..<upperBound2

    let minsStr = String(twitterTime[range2])

    var timeInt = Int(timeStr)!
    print("test time \(timeInt)")

    if timeInt > 12{
        if timeInt != 24{
        timeInt = timeInt - 12
        }else{
            timeInt = 12
        }
        return "\(newStr) \(timeInt)\(minsStr) PM"
    }else{
        return "\(newStr) \(timeInt)\(minsStr) AM"

    }

}

1 Ответ

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

Правильный способ работы с этой строкой даты - использовать DateFormatter, чтобы сначала преобразовать строку в Date.Затем используйте другой DateFormatter для преобразования в новую строку в желаемом стиле.

let twitterTimestamp = "Thu May 31 16:43:37 +0000 2018"
let tdf = DateFormatter()
tdf.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
tdf.locale = Locale(identifier: "en_US_POSIX")
if let date = tdf.date(from: twitterTimestamp) {
    let df = DateFormatter()
    df.dateStyle = .medium
    df.timeStyle = .medium
    let result = df.string(from: date)
} else {
    // Unexpected date string
}

Результат будет в местном времени пользователя.

Установите dateStyle и timeStyle свойства в соответствии с вашими конкретными потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...