При конвертации времени, получая значение, возможно ли исправить код? - PullRequest
2 голосов
/ 11 апреля 2019

При покрытии времени получение значения a - ve означает, что при преобразовании с 13:30 до 13:30 получение с 13:30 и при получении правильного кода в 09:30

 houRString = 13  &   minTString =30

 if let min = Int(houRString!),let sec = Int(minTString!) {
   var totalSec = (min * 60) + sec
   totalSec += 0
   let min = (totalSec/60) > 12 ? 12 - (totalSec/60) : (totalSec/60)
   cell.patTimeTxt.text = String(format: "%02d.%02d %@", min,(totalSec%60),((Int(houRString!) ?? 0) > 12 ? "PM" : "AM"))
 }

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Ваша проблема в том, что вы вычитаете 13 часов из 12 12 - (totalSec/60) вместо того, чтобы вычитать 12 из 13 (totalSec/60) - 12.

Так что вам просто нужно просто изменить

let min = (totalSec/60) > 12 ? 12 - (totalSec/60) : (totalSec/60)

до

let min = (totalSec/60) > 12 ? (totalSec/60) - 12 : (totalSec/60)

Я бы также изменил формат строки на "%02d:%02d %@", и ваше имя переменной вводит в заблуждение (вы используете totalSec, где фактически указано общее количество минут), и нет необходимости вычислять общее количество минут:

let houRString = "13"
let minTString = "30"

if let hour = Int(houRString), let min = Int(minTString) {
    let hourAMPM = hour > 12 ? hour - 12 : hour
    let amPM = hour > 12 ? "PM" : "AM"
    print(String(format: "%02d:%02d %@", hourAMPM, min, amPM))  // "01:30 PM\n"
}
1 голос
/ 11 апреля 2019

Просто замените

cell.patTimeTxt.text = String(format: "%02d.%02d %@", min,(totalSec%60),((Int(houRString!) ?? 0) > 12 ? "PM" : "AM"))

с

cell.patTimeTxt.text = String(format: "%02d.%02d %@", abs(min) , (totalSec % 60), (min > 12 ? "PM" : "AM"))

Здесь это изменение abs(min), которое преобразует отрицательные значения в положительные. И это решит вашу проблему, но предоставьте мне правильный способ сделать это с помощью DateFormatter, проверьте ниже пример:

let houRString = "13"

let minTString = "30"

let str = "\(houRString):\(minTString)"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "H:mm"
if let inDate = dateFormatter.date(from: str) {
    dateFormatter.dateFormat = "hh:mm a"
    let time = dateFormatter.string(from:inDate)
    print("time in 12 hour is: \(time)") //"time in 12 hour is: 01:30 PM\n"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...