1с дата в формате rfc3339

Обновлено: 07.07.2024

Команда date не предлагает ничего подобного, что довольно печально, поскольку RFC-3339 - это современный, широко распространенный, здравый формат, используемый везде (кроме электронной почты, которая не является ни современной, ни здравой).

Мое смещение часового пояса в настоящее время составляет -08: 00, поэтому самая простая форма этой команды должна выводить текущее время как 2013-09-05T14:58:33.102-08:00 .

Лично я в порядке с GNU, но по большому счету все должно быть шире. Он также должен иметь разумное значение по умолчанию (короткая опция, точность в миллисекундах) и иметь способ указать точность в секунду (количество цифр, отличное от 0 или 9). Это не нормальный формат: полное отсутствие пробелов затрудняет чтение людьми. Вы должны использовать небольшое отклонение, 2013-09-05 14:58:33.102 -0800 кроме случаев, когда есть какая-то причина, почему пробелы вообще не должны использоваться. Я сравнивал его с почтовым форматом даты (RFC 822, 2822), который трудно читать людям и машинам.

Похоже , что вы можете сделать несколько форматов , используя переключатель для реализации ГНУ date (версии 5.90 или выше), --rfc3339= .

Примеры

Если вы хотите, T чтобы был добавлен, как взломать:

Если вы хотите это в миллисекундах:

Ссылки

В наши дни не требуется взлом, чтобы получить «Т». --iso-8601' option accepts the same arguments as --Rfc-3339`, и включает в себя «T» в его выходе. Сед часть s/\(\. \).*-/\1-/g должна s/\(\. \).*\([+-]\)/\1\2/g также работать восточнее Атлантики. @ rwenz3l Моя вина. Я только прочитал только часть ABNF и пропустил примечания. Спасибо за указание на это!

С GNU date (5,90 или выше):

Заменить %N с %3N для миллисекунд, в %6N течение микросекунд .

AFAIK, ни одна из спецификаций POSIX, Unix или LSB не определяет какую-либо команду, которая может отображать время с точностью до доли секунды, но дробная часть является необязательной в RFC 3339.

POSIX / Unix / LSB strftime поддерживает %z отображение смещения TZ как -0800 , поэтому наиболее переносимым, что вы, вероятно, собираетесь получить, является:

GNU date имеет встроенный формат ISO-8601 - не слишком ли он близок или вообще не соответствует RFC-3339?

ISO-8601 допускает различное форматирование даты и времени, но я думаю, что OP специально запрашивает формат даты W3C «Полная дата плюс часы, минуты, секунды и десятичная дробь секунды ГГГГ-ММ-ДДЧч: мм: сс.сTZD (например, 1997-07-16T19: 20: 30.45 + 01: 00) " - W3C Форматы даты и времени .

Как насчет старого доброго:

быстрое примечание, здесь, без открытия RFC, сегмент часового пояса, 0200 пропускает двоеточие, которое может сломать некоторые системы, которые в этом нуждаются.

Вы также можете проще отформатировать время в соответствии с RFC3339 (ISO8601) :

ПРИМЕЧАНИЕ. Этот формат также используется в конвенции Label Schema Convention RC 1.0.

Это не действительный RFC3339. Ответ Эрана на `` `date +% Y-% m-% dT% T% z` `` является правильным и содержит меньше символов. Если вы хотите в UTC передать флаг -u, который обнулит смещение часового пояса.

ПРИМЕЧАНИЕ. Команда проекта Heirloom date имеет несовместимый %z вывод: она не печатает + знак.

В статье представлены способы задать формат даты 1с 8. Для этого необходимо использовать форматную строку. Редактировать ее можно либо вручную, либо при помощи специального конструктора.

Форматные строки используются в:

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

Формат даты 1с при помощи форматной строки

При помощи форматной строки можно задать параметры форматирования даты. Не стоит описывать их полностью вручную. Лучше всего, воспользоваться встроенным в платформу конструктором, а затем отредактировать полученную форматную строку вручную. Это сэкономит ваши силы и позволит быстро добиться результата.

  • Следует описать функцию Формат, без форматной строки:
  • Поставить курсор между кавычек, вызвать конструктор;
  • После окончания работы с конструктором нажать ОК.

Конструктор форматной строки

Сам же конструктор форматной строки представляет собой набор вкладок, предназначенных для форматирования данных различных типов. Нас интересует вкладка Дата.

Локальный формат даты 1с


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

Также можно добавлять в форматную строку произвольный текст, используя кавычки (если добавляемый текст не может быть интерпретирован, как составная часть даты, тогда можно обойтись и без кавычек):

Формат даты 1с с произвольным текстом

Итоговый текст такой форматной строки будет выглядеть следующим образом:

Примеры использования формата дат

Приведем несколько примеров форматирования даты.

Дата без времени (05.10.2020)

Только время (12:35:50)

Месяц текстом, год полностью (Октябрь 2020)

Месяц текстом кратко, год без тысячелетия (окт. 20)

Месяц числом, через точку год полностью (10.2020)

Склонение названия месяца

Функция возвращает массив вариантов склонения строки. Подробнее прочитать про заполнение параметров можно в синтаксис помощнике.


Когда вы работаете с временем и датой в форме Razor Pages, очень важно выбрать элемент управления, который наилучшим образом будет удовлетворять требованиям вашей задачи. До HTML5 разработчики в значительной степени полагались на сторонние библиотеки с элементами выбора времени и даты. На сегодняшний день у них есть множество встроенных в браузеры опций, тем не менее они предпочитают наслаждаться многообразием вспомогательных технологий, доступных для ​​современных браузеров. К ним относятся опции для управления и временем и датой, только временем или только датой, а также для выбора месяца или недели в году.

Поля ввода DateTime

Тег-хелпер (Tag Helper) input в Razor Pages генерирует подходящее значение для атрибута type на основе типа данных свойства модели, указанного с помощью атрибута asp-for .

В Chrome, Edge и Opera datetime-local генерирует элемент управления, который позволяет пользователю выбрать время и дату. Форматирование отображения даты и времени в элементе управления определяется региональными настройками операционной системы, и предполагается, что само значение представляет локальную время и дату, а не универсальное время (среднее по Гринвичу - UTC):


Если вы используете другой браузер (IE 11, Firefox, Safari), элемент управления генерирует простое текстовое поле ввода.

Изучая сгенерированную разметку, вы можете заметить, что value было отформатировано тег-хелпером input в представление, соответствующее стандарту ISO 8601, как указано в RFC3339:


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


Зачастую вам нужно, чтобы пользователь мог указывать время с точностью только до минут. Вы можете управлять этим с помощью форматирования временной части значения, передаваемого элементу управления. Сделать это можно двумя способами. Чтобы задать формат, вы можете повесить на свойство модели атрибут аннотирования данных DisplayFormat , и обеспечить его применение, когда это значение находится в “режиме редактирования” (в элементе управления):

В качестве альтернативы вы можете использовать атрибут asp-format в самом тег-хелпере input :


После этого элемент управления будет отображать свои дефолтные настройки:


Поля ввода Date и Time

Для поддержки более широкого диапазона браузеров (делая выбор в сторону нативных элементов управления вместо сторонних библиотек), вы можете использовать отдельные элементы управления date и time . Но это предполагает немного больше конфигураций, чтобы заставить тег-хелпер input генерировать правильные элементы управления:

Оба свойства имеют тип DateTime , и к ним применяется атрибут DataType для установки правильного типа генерируемых полей ввода. Тег-хелпер input поддерживает параметры DataType.Date и DataType.Time и будет генерировать их соответствующим образом:



Опять же, вы можете отформатировать время, применив форматирующую строку либо к атрибуту DisplayFormat в свойстве модели, либо посредством атрибута asp-format в тег-хелпере. Когда значения вводятся, привязчик (связыватель, binder ) модели успешно конструирует типы DateTime с частью времени, установленной в полночь для значения поля ввода date , и частью даты, установленной на сегодняшний день в случае значения поля ввода time . Вы можете сложить эти значения для создания нового DateTime :

Всемирное скоординированное время

Всемирное скоординированное время (Coordinated Universal Time или UTC) рекомендовано для использования в приложениях, которые требуют, чтобы время и дата сохранялись или представлялись вне зависимости от часового пояса. Чтобы узнать об этом больше, вы можете почитать исчерпывающую статью Рика Страла на эту тему. Ни один из элементов управления временем или датой не поддерживает значения времени формата UTC в представлении ISO 8601, т.е. yyyy-MM-ddTHH:mm:ssZ (где Z - информация о часовом поясе, представляющая нулевое смещение часового пояса, что идентифицирует это значение как UTC). Однако вам, возможно, придется работать с приложениями, в которых этот стандартный формат используется для обмена информацией о времени.

Например, возьмем значение, представляющее 02:15 утра 30 октября 2020 г., UTC: 2020-10-30T02:15:00Z . На следующем изображении показано, как привязчик модели парсит это значение, когда сервер работает в тихоокеанском часовом поясе:


Дефолтный DateTimeModelBinder способен распознавать и обрабатывать строки времени и даты, включающие информацию о часовом поясе. Если часовой пояс отсутствует, привязчик устанавливает в свойство Kind результирующего значения DateTime значение DateTimeKind.Unspecified . Остальные значения DateTimeKind - Local (представляющее локальное время) и Utc (время в формате UTC). Обратите внимание, что для параметра Kind на изображении выше установлено значение Local вместо Utc , несмотря на то, что это явно время в формате UTC, на что указывает Z в конце строки. Привязчик преобразовал время в формате UTC в локальное время на основе настроек сервера. Сегодня, когда я пишу эту статью (30 октября), применяется тихоокеанское летнее время, которое на 7 часов опережает значение UTC, то есть прошлую ночь. Завтра, когда на западном побережье США закончится летнее время, сгенерированное значение будет опережать UTC на 8 часов, поэтому распаршенное финальное значение будет представлять уже третье время. Чтобы получить значение в UTC, вам необходимо либо использовать метод ToUniversalTime() с распаршенным результатом:


либо реализовать собственный привязчик модели для обработки строк времени в формате UTC в приложении глобально. В следующей статье я рассмотрю пользовательские привязчики модели для решения похожей задачи.


Ни одно из значений не было скорректировано, а для параметра Kind автоматически установлено значение Utc.

Поля ввода Month и Week

Типы полей ввода недели и месяца в настоящее время реализованы в Edge, Chrome и Opera. Там, где они поддерживается, тип month предоставляет пользователю возможность выбрать конкретный месяц и год:


Тег-хелпер input будет генерировать элемент управления с type="month" , если мы проведем небольшую конфигурацию. Сделать это можно с помощью перегрузки атрибута DataType , которая принимает строковый параметр, представляющий настраиваемый тип данных:

Формат ввода значения месяца - yyyy-MM . Тег-хелпер input успешно генерирует подходящее значение из типа DateTime . Таким образом, чтобы селектор месяца генерировался правильно, вам не нужно применять никаких форматирующих строк:

Когда значение вводится, дефолный DateTimeModelBinder привяжет это значение к DateTime с корректными месяцем и годом, а также днем, установленным в 1.

Тип поля ввода week будет генерироваться также успешно, если вы установите пользовательский тип данных в свойство DateTime :



Однако дефолтный DateTimeModelBinder не может привязать это значение обратно к DateTime . У вас есть несколько вариантов. Самый грубый вариант - получить доступ к значению непосредственно из коллекции Request.Form , распарсить его как строку и сгенерировать DateTime самостоятельно:

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

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

Заключение

В подавляющем большинстве случаев HTML5, тег-хелпер input и дефолтный DateTimeModelBinder хорошо сочетаются друг с другом, упрощая работу с временем и датами в форме Razor Pages. Браузерные реализации полей ввода HTML5 управляют данными стандартным способом, отображая их в формате, с которым пользователь хорошо знаком, что снижает зависимость разработчиков от сторонних компонентов.

Одна из проблем ( или неудобств) работы в формате JSON связана с преобразованием строки в дату. На помощь этой проблемы, без необходимости написания собственных функций преобразований, приходят функции глобального контекста :

Более подробный теоретический материал о работе в формате JSON можно прочитать здесь


Рис 1 Обработка демонстрации чтения и записи JSON.

Эти Заявки создаются в пункте приема оборудования различных граждан. Оборудование курьером ( доверенным лицом или представителем ) оправляется к исполнителю ( авторизированному сервисному центру, далее АСЦ). В заявке указываются данные оборудования и его владельца для открытия заказ-наряда в АСЦ.

Программный код процедуры записи заявки в текстовом файле в формате JSON показан в следующем фрагменте модуля управляемой формы обработки ( Для упрощения демонстрации примера сокращены количество выгружаемых данных ) :

Обратите внимание, что для записи данных типа даты я использую метод глобального контекста языка 1С ЗаписатьДатуJSON

Созданный текстовый файл выгрузки в формате JSON выгладит в следующем образом:


Рис 2 Текстjdsq файл в формате JSON

Загрузка этого файла выполняется на закладке Загрузка созданной для этой цели обработки (см рис 3):


Рис 3 Обработка демонстрации чтения и записи JSON

Обработанные данные после чтения я записываю в табличный документ для проверки распознавания данных. Программный код чтения файла показан в следующем фрагменте:

В этом фрагменте программного кода чтения следует обратить внимание на то, что я нигде не использую метод ПрочитатьДатуJSON для строки, прочитанной в JSON-формате, в значение типа Дата. Дело в том, что в параметрах метода ПрочитатьJSON я передаю массив реквизитов, которые нужно преобразовать в дату из формата ФорматДатыJSON.ISO :

В более сложных задачах выгрузки возможно потребуется использовать функции восстановления чтения данных, например:

В данном случае , преобразование даты из строки осуществляется в функции восстановления ФункцияВосстановленияЧтения

Данная функция вызывается при чтении каждого свойства и должна иметь следующие параметры:

Теоретический материал о работе в формате JSON можно прочитать здесь

Читайте также: