Как строку вида 2023-07-24T15:35:34+03:00 (формат ISO 8601) преобразовать в дату? Стандарт ISO 8601, составлен таким образом, что:
Строка даты-времени сплошная без пробельных разделителей Латинские символы используются в качестве разделителей/идентификаторов: D - дни, Y - годы, Z - идентификатор UTC и т.д., например можно задать промежуток времени: P4Y3M2D1H - 4 года, 3 месяца, 2 дня и 1 час. Буква T выбрана в качестве уникального разделителя времени, остальные буквы латинского алфавита (почти все) задействованы под разные цели и они не пересекаются. Соответственно упрощается парсинг ISO-8601 строки: имеется заранее известный набор флагов/символов/маркеров, опираясь на которые, можно достаточно быстро разбить строку на нужные составляющие и при этом сохраняется требование к human readability самой строки.
Конвертация даты из формата ISO8601 в дату 1С:
Код 1C v 8.3
Дата1 С = XMLЗначение( Тип( "Дата" ) , "2023-07-24T15:35:34+03:00" ) ;
Функция КонвертироватьДатуISO8601ВДату(Дата) Экспорт
КонвертированнаяДата = Новый Структура( "Дата, Миллисекунды" ) ;
АвтоконвертированнаяДата = XMLЗначение( Тип( "Дата" ) , Дата) ;
Миллисекунды = Сред( Дата, 21 ) ;
Миллисекунды = СокрЛП( СтрЗаменить( Миллисекунды, "Z" , "" ) ) ;
Если НЕ ПустаяСтрока( Миллисекунды) Тогда
ЧислоМиллисекунд = Число( Миллисекунды) ;
Если ЧислоМиллисекунд > = 500 Тогда
АвтоконвертированнаяДата = АвтоконвертированнаяДата - 1 ;
КонецЕсли ;
КонецЕсли ;
КонвертированнаяДата. Дата = АвтоконвертированнаяДата;
КонвертированнаяДата. Миллисекунды = Миллисекунды;
Возврат КонвертированнаяДата;
КонецФункци
Категория:
Работа с Датами (Временем) Как получить текущее время с милисекундами? В Платформе 8.2.17 реализована возможность получения числа миллисекунд, прошедших с 1 января 0001 года, 0:00:00 UTC с помощью функции
Код 1C v 8.2 УП ТекущаяУниверсальнаяДатаВМиллисекундах( )
Код 1C v 8.х // В 8.х переменные типа "дата" содержат миллисекунды , только это нигде не написано
ДатаИсх = ТекущаяДата(); //простая дата+время
ДатаНов = ДатаИсх + 0.567; //дата+время+миллисекунды
Миллисекунды = (ДатаНов - ДатаИсх) * 1000; //вытаскиваем миллисекунды из даты
Код 1C v 8.х Функция ПолучитьТекущееВремяВМиллисекундах() Экспорт
Если JavaScript = Неопределено Тогда
Попытка
JavaScript = Новый COMОбъект( "MSScriptControl.ScriptControl" ) ;
Исключение
Сообщить( ОписаниеОшибки( ) , СтатусСообщения. Внимание) ;
Возврат 0 ;
КонецПопытки ;
JavaScript. Language = "javascript" ;
КонецЕсли ;
Время = JavaScript. Eval( "new Date().getTime()" ) ;
Возврат Время;
КонецФункции
Код 1C v 8.х
Locator = Новый COMОбъект( "WbemScripting.SWbemLocator" ) ;
ServicesSet = Locator. ConnectServer( "." ) ;
Для а= 1 по 100 цикл
pEnum = ServicesSet. InstancesOf( "Win32_OperatingSystem" ) ;
Для каждого Object Из pEnum Цикл
сообщить( сред( Object. LocalDateTime, 13 , 6 ) ) ;
Прервать ;
КонецЦикла ;
КонецЦикла ;
Код 1C v 7.x
Scr= СоздатьОбъект( "MSScriptControl.ScriptControl" ) ;
Scr. Language = "javascript" ;
d= Scr. Eval( "new Date();" ) ;
Сообщить( d. getTime( 0 ) ) ;
Сообщить( d. getHours( 0 ) ) ;
Сообщить( d. getMinutes( 0 ) ) ;
Сообщить( d. getSeconds( 0 ) ) ;
Сообщить( d. getMilliseconds( 0 ) ) ;
Категория:
Работа с Датами (Временем)