Преобразовать часы с 12 часов в 24-часовой формат Swift и сохранить как целое число - PullRequest
0 голосов
/ 19 октября 2018

Я хочу преобразовать мою переменную для часов, которая является целым числом, в 24-часовую систему времени (например, если это 01:05:13 PM, часы будут сохранены как 13, минуты будут сохранены как 5, исекунды будут сохранены как 13), чтобы позже я мог использовать их для некоторой математики в своем коде, чтобы выявить некоторые различия в приложении планирования, над которым я работаю.Это мое первое приложение, и я нигде не смог найти ответ на этот вопрос, так что спасибо за вашу помощь!Еще один способ, с помощью которого этот код может работать, - это получение суммы в секундах с начала дня, и если кто-нибудь знает, как это сделать, это будет с благодарностью!Это моя функция для получения времени и сохранения его в виде трех разных целых чисел для часов, секунд и минут:

@IBAction func setTime() {

    var date = NSDate()
    //pickTimes()
    var calendar = NSCalendar.current
    calendar.timeZone = TimeZone(identifier: "UTC")!
    var currentHour = calendar.component(.hour, from: date as Date) + 5
    let currentMinutes = calendar.component(.minute, from: date as Date)
    let currentSeconds = calendar.component(.second, from: date as Date)
    timeText.text = ("\(currentHour):\(currentMinutes):\(currentSeconds)")
}

1 Ответ

0 голосов
/ 19 октября 2018
  1. calendar.component(.hour, from: someDate) уже дает вам время суток в 24-часовом времени, поэтому больше ничего не остается для решения вашего вопроса.
  2. Не уверен, почему вы добавляете 5 к часу.Вы устанавливаете часовой пояс в формате UTC, поэтому дата будет считаться часовым поясом в формате UTC.Затем вы добавляете 5 к этому результату.Это немного странно.Если вы просто хотите, чтобы текущий час находился в часовом поясе пользователя, не меняйте часовой пояс календаря и не добавляйте 5 к часу.
  3. Не используйте NSDate или NSCalendar.Это Свифт.Используйте Date и Calendar.

Обновленный код:

@IBAction func setTime() {
    var date = Date()
    //pickTimes()
    var calendar = Calendar.current
    var currentHour = calendar.component(.hour, from: date)
    let currentMinutes = calendar.component(.minute, from: date)
    let currentSeconds = calendar.component(.second, from: date)
    timeText.text = ("\(currentHour):\(currentMinutes):\(currentSeconds)")
}

Но было бы проще использовать DateFormatter и установить timeStyle на .medium или, может быть, .long и форматировать Date() в строку.Это даст правильно локализованную временную строку.

...