Отработайте минуту и часы

Никогда не печатать error.localizedDescription в блоке декодирования catch. Это возвращает совершенно бессмысленное общее сообщение об ошибке. Всегда печатайте экземпляр error. Тогда вы получите желаемую информацию.

let decoder = JSONDecoder()
    if let data = data {
        do {
            // process data

        } catch  {
           print(error)
    }

Или для полного набора ошибок используйте

let decoder = JSONDecoder()
if let data = data {
    do {
       // process data
    } catch let DecodingError.dataCorrupted(context) {
        print(context)
    } catch let DecodingError.keyNotFound(key, context) {
        print("Key '\(key)' not found:", context.debugDescription)
        print("codingPath:", context.codingPath)
    } catch let DecodingError.valueNotFound(value, context) {
        print("Value '\(value)' not found:", context.debugDescription)
        print("codingPath:", context.codingPath)
    } catch let DecodingError.typeMismatch(type, context)  {
        print("Type '\(type)' mismatch:", context.debugDescription)
        print("codingPath:", context.codingPath)
    } catch {
        print("error: ", error)
    }
5
задан abatishchev 29 March 2012 в 08:17
поделиться

5 ответов

var span = System.TimeSpan.FromMinutes(121);
var hours = ((int)span.TotalHours).ToString();     
var minutes = span.Minutes.ToString();

ToString () - то, потому что Вы попросили строковые значения...

TotalHours являются полными часами в TimeSpan, они могут быть больше чем 24 (тогда как поле "Hours" имеет максимум 24),

О, и вообще-то, если задуматься: Почему использование TimeSpan и не вычисляет его самостоятельно? Поскольку TimeSpan уже там отлажен и протестирован Microsoft, он имеет хороший чистый интерфейс (рассмотрение кода, Вы легко видите то, что продолжается, не имея необходимость следовать за вычислением мысленно), и он легко расширяется на дальнейшие решения. (Имейте вход в секундах? Используйте TimeSpan. FromSeconds (). Хотите дни? Используйте промежуток. TotalDays...)

Обновление:

Я просто заметил ошибку в своем ответе: TotalHours возвращает дробное значение всех часов, таким образом, мы должны усечь его к целому числу прежде, чем преобразовать его в строку.

34
ответ дан 18 December 2019 в 05:16
поделиться

Используйте структуру Промежутка и ее метод Синтаксического анализа.

8
ответ дан 18 December 2019 в 05:16
поделиться
int value = 121;
TimeSpan timeSpan = TimeSpan.FromMinutes(value);

// gives you the rounded down value of 2
int hours = timeSpan.Hours; 

// gives you the minutes left of the hour
int minutes = value - (hours * 60);
0
ответ дан 18 December 2019 в 05:16
поделиться
int value = 121;
int hours = value / 60;
int minutes = value % 60;
1
ответ дан 18 December 2019 в 05:16
поделиться
int value = 121;
int hours = value / 60; // 2
int minutes = value % 60; // 1

string strHours = hours.ToString();
string strMinutes = minutes.ToString();
2
ответ дан 18 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: