Сложное форматирование времени: — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Сложное форматирование времени:

2021-01-29 56
Сложное форматирование времени: 0.00 из 5.00 0 оценок
Заказать работу

 

Хотя часто достаточно использования и, у них есть также и ограничения:

• Формат вывода фиксирован. Нет способа изменить порядок элементов.

• В вывод не включаются сведения о часовом поясе.

• В выводе используются сокращенные названия месяца и дня.

• В выводе используются английские названия месяцев и дней.

По этим причинам C89 ввело стандартную библиотечную процедуру:

 

 

 сходна с. Ее аргументы следующие:

 

Буфер для форматированной строки.

 

Размер буфера.

 

Форматирующая строка.

 

Указатель на, представляющий разложенное время, которое надо отформатировать.

Форматирующая строка содержит символы букв, смешанные о описателями преобразования, указывающими, что должно быть помещено в строку, такими, как полное имя дня недели, час в соответствии с 24‑часовым или 12‑часовым циклом, наличие указателей am или p.m[64], и т.д. (Вскоре будут приведены примеры.)

Если всю строку можно отформатировать с использованием не более символов, возвращаемое значение представляет собой число символов, помещенных в, не включая завершающий нулевой байт. В противном случае, возвращаемое значение ноль. В последнем случае содержание «неопределенно». Следующий простой пример дает представление об использовании:

 

 

После запуска эта программа выводит что‑то типа:

 

В табл. 6.2 предоставлен полный список описателей преобразования, их возможные альтернативные представления и их значения. Вдобавок стандарт C99 добавил к списку дополнительные описатели; новые для C99 описатели помечены символом √.

 

Таблица 6.2. Описатели преобразования формата

 

 Описатель C99 Значение
    Локальное сокращенное название дня недели.
    Локальное полное название дня недели.
    Локальное сокращенное название месяца.
    Локальное полное название месяца.
    Локальное «подходящее» представление даты и времени
  Век (00–99)
    День месяца (01–31)
  То же, что
  День месяца. Одна цифра дополняется пробелом (1–31).
  То же, что и (формат даты ISO 8601)
  Две последние цифры, основанной на неделе года (00–99).
  Основанный на неделе год ISO 8601
  То же, что и
    Час в 24‑часовом цикле (00–23)
    Час в 12‑часовом цикле (01–12)
    День года (001–366)
    Месяц в виде числа (01–12).
    Минута в виде числа (00–59)
  Символ конца строки ('')
    Локальное обозначение a.m./p.m.
  Локальное время в 12‑часовом цикле
  Тоже, что и
    Секунда в виде числа (00–60)
  Символ табуляции ('')
  То же, что и (формат ISO 8601).
  Число дня недели ISO 8601, понедельник = 1 (1–7).
    Номер недели, первое воскресенье является первым днем недели 1 (00–53)
  Номер недели ISO 8601 (01–53)
    День недели как число, воскресенье = 0 (0–6).
    Номер недели, первый понедельник является первым днем недели 1 (00–53)
    Локальное «подходящее» представление даты
    Локальное «подходящее» представление времени.
    Две последние цифры года (00–99)
    Год как число.
    Локальный часовой пояс или отсутствие символов, если сведения о часовом поясе недоступны
    Простой

Локаль (locale) является способом описания местной специфики, принимая во внимание такие вещи, как язык, кодировка символов и значения по умолчанию для форматирования дат, времени, денежных сумм и т.д. Мы будем иметь с ними дело в главе 13 «Интернационализация и локализация». Пока достаточно понять, что результаты для одной и той же форматирующей строки могут быть разными в зависимости от настроек текущей локали.

Версии, начинающиеся с и, предназначены для «альтернативного представления». В некоторых локалях есть несколько способов представления одних и тех же сведений; эти описатели предоставляют доступ к дополнительным представлениям. Если определенная локаль не поддерживает альтернативного представления, использует обычную версию.

Многие Unix‑версии дают возможность предоставить в командной строке форматирующую строку, начинающуюся с символа ''. Затем форматирует текущие дату и время и выводит в соответствии с форматирующей строкой:

date + 'It is now %A, %B %d, %Y, %I:%M %p'

 

Большинство новых описателей C99 происходит от таких существующих реализаций Unix. Описатели и не являются в С абсолютно необходимыми, поскольку символы табуляции и конца строки могут быть помещены в строку непосредственно. Однако в контексте форматирующей строки для командной строки они имеют больше смысла. Поэтому они также включены в спецификацию.

Стандарт ISO 8601 определяет (среди других вещей), как нумеруются недели в пределах года. В соответствии с этим стандартом недели отсчитываются с понедельника по воскресенье, а понедельник является днем недели 1, а не 0. Если неделя, в которой оказывается 1 января, содержит по крайней мере четыре дня нового года, она считается неделей 1. В противном случае, это последняя неделя предыдущего года с номером 52 или 53. Эти правила используются для вычислений описателей форматов, и. (Хотя ограниченным американцам, таким, как автор, эти правила могут показаться странными, они обычно повсюду используются в Европе.)

Многие из описателей стандартов дают результаты, специфичные для текущей локали. Вдобавок некоторые указывают, что они выдают «подходящее» представление для локали (например,). Стандарт C99 определяет значения для локали «С». Эти значения перечислены в табл. 6.3

 

Таблица 6.3. Значения локали «С» для определенных форматов

 

 Описатель Значение
  Первые три символа.
  Один из дней Sunday, Monday, …, Saturday
  Первые три символа
  Один из месяцев January, February, …, December
  То же, что и
  AM или PM
  То же, что и
  То же, что и
  То же, что и.
  Определяется реализацией

Должно быть очевидно, что предоставляет значительную гибкость и контроль над связанным с датой и временем выводом, во многом таким же образом, как и. Более того, не может переполнить буфер, поскольку она проверяет входной параметр размера, что делает ее более безопасной процедурой, чем.

В качестве простого примера рассмотрим создание файлов журнала программы, когда каждый час создается новый файл. Имя файла должно включать дату и время создания:

 

Формат год‑месяц‑день‑час‑минута вызывает сортировку файлов в том порядке, в каком они были созданы.

 

ЗАМЕЧАНИЕ. Некоторые форматы данных более полезны, чем другие. Например, 12‑часовое время двусмысленно, также, как чисто числовые форматы дат. (Что означает ''? Это зависит от того, где вы живете) Сходным образом, годы из двух цифр также являются плохой мыслью. Используйте благоразумно

 

6.1.4. Преобразование разложенного времени в

 

Получение от системы значений «секунд с начала Эпохи» просто; именно так даты и времена хранятся в индексах и возвращаются с помощью и. Эти значения также легко оценивать на равенство или посредством < и > для простых тестов раньше/позже.

Однако, с датами, введенными людьми, не так легко работать. Например, многие версии команды позволяют предусмотреть дату и время, в которое должна установить время модификации или доступа к файлу (с помощью, как было описано в разделе 5.5.3 «Изменение отметок времени:»).

Преобразование даты, введенной человеком, в значение трудно: надо принять во внимание високосные годы, учесть часовые пояса и т.д. Поэтому стандарт C89 ввел функцию:

 

Для использования укажите в соответствующие значения – год, месяц, день и т.д. Если вы знаете, действовало ли для данной даты летнее время, установите соответствующим образом поле: 0 для «нет» и положительное значение для «да». В противном случае, используйте отрицательное значение для «не знаю». Поля и игнорируются.

 предполагает, что представляет локальное время, не UTC. Она возвращает значение, представляющее переданные дату и время, или, если данные дата/время не могут быть правильно представлены. После успешного возвращения все значения выверены на попадание в правильные диапазоны, a и также корректно установлены. Вот простой пример:

 

 

В строке 11 запрашиваются дата и время, а в строках 12–14 соответствующие значения считываются. (В коде изделия возвращаемые значения должны проверяться.) Строки 17 и 18 компенсируют различную базу для лет и месяцев соответственно. Строка 20 указывает, что мы не знаем, представляют ли данные дата и время летнее время. Строка 22 вызывает, а строка 24 выводит результат преобразования. После компилирования и запуска мы видим, что это работает:

ch06‑echodate

 


Поделиться с друзьями:

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.014 с.