Преобразовать строку в дату
Получаю ParseException Unparseable date: «12 фев 21, 07:36», пробовал так же убирать время с помощью split и переводить только «12 фев 21», но получал такой же эксепшин, может кто-нибудь помочь пожалуйста ?
Отслеживать
задан 15 фев 2021 в 21:02
175 10 10 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
В принципе все правильно делаете, только язык не учли —
public static void main(String[] args) throws ParseException
Отслеживать
ответ дан 15 фев 2021 в 21:28
AlekseiGaile AlekseiGaile
1,708 3 3 золотых знака 10 10 серебряных знаков 16 16 бронзовых знаков
Получаю тот же самое: Unparseable date (
15 фев 2021 в 21:43
@nPaBllla, new Locale(«ru») не забыли поставить? У меня работает и выдает результат — «Fri Feb 12 07:36:00 EET 2021»
15 фев 2021 в 21:48
Нет, все поставил, в idea у меня не работает, я попробовал еще на онлайн компиляторах и там в 50% срабатывает, не могу понять от чего это зависит
Как получить дату из строки?
Важно помнить, что во встроенном языке 1С:Предприятие 8 строка будет восприниматься как дата только в том случае, если она удовлетворяет следующей схеме:
20200101103000 (дата + время) ГГГГ----------- номер года ММ--------- номер месяца ДД------- номер дня месяца чч----- час мм--- минута сс- секунда
Часть даты, описывающую время (в нашем случае это «103000» ), можно опустить. Платформа будет понимать, что подразумевается время 00:00:00
20200101 (только дата) ГГГГ----- номер года ММ--- номер месяца ДД- номер дня месяца
Любой переменной или реквизиту типа Дата можно присвоить значение несколькими способами:
-
Используя строковые литералы:
НоваяДата = '20200101'; Сообщить(НоваяДата); //Результат: // 01.01.2020 0:00:00
НоваяДата = Дата('20200101'); Сообщить(НоваяДата); //Результат: // 01.01.2020 0:00:00
ДатаСтрокой = "01012020"; Год = Число(Сред(ДатаСтрокой, 5, 4)); Месяц = Число(Сред(ДатаСтрокой, 3, 2)); День = Число(Сред(ДатаСтрокой, 1, 2)); НоваяДата = Дата(Год, Месяц, День); Сообщить(НоваяДата); //Результат: // 01.01.2020 0:00:00
Обратите внимание, что в последнем примере переменная ДатаСтрокой содержит строковое представление даты другого формата, отличного от принятого на платформе 1С:Предприятие 8
How to Convert String to Datetime in Python
- datetime.strptime() to Convert String to Datetime
- Python datetime.strptime() Examples
This tutorial introduces how to convert string to datetime in Python and also lists some example codes to cover popular datetime string formats.
datetime.strptime() to Convert String to Datetime
In the previous tutorial, we have learned how to get the datetime in string format by using the datetime.strftime() method. We will use the datetime.strptime() method to do the revere conversion to get the datetime object. f and p in these two methods mean format and parse respectively.
datetime.strptime() method parses the input string with the given datetime format and returns the datetime object.
The basis example to use this strptime() method is shown below,
from datetime import datetime datetime.strptime("2018-01-31", "%Y-%m-%d")
The result will be
datetime.datetime(2018, 1, 31, 0, 0)
The directives of the string format codes are listed here for your reference
Directive | Meaning | Example |
---|---|---|
%a | Weekday as locale’s abbreviated name. | Sun, Mon, …, Sat (en_US);So, Mo, …, Sa (de_DE) |
%A | Weekday as locale’s full name. | Sunday, Monday, …, Saturday (en_US);Sonntag, Montag, …, Samstag (de_DE) |
%w | Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. | 0, 1, …, 6 |
%d | Day of the month as a zero-padded decimal number. | 01, 02, …, 31 |
%b | Month as locale’s abbreviated name. | Jan, Feb, …, Dec (en_US);Jan, Feb, …, Dez (de_DE) |
%B | Month as locale’s full name. | January, February, …, December (en_US);Januar, Februar, …, Dezember (de_DE) |
%m | Month as a zero-padded decimal number. | 01, 02, …, 12 |
%y | Year without century as a zero-padded decimal number. | 00, 01, …, 99 |
%Y | Year with century as a decimal number. | 0001, 0002, …, 2013, 2014, …, 9998, 9999 |
%H | Hour (24-hour clock) as a zero-padded decimal number. | 00, 01, …, 23 |
%I | Hour (12-hour clock) as a zero-padded decimal number. | 01, 02, …, 12 |
%p | Locale’s equivalent of either AM or PM. | AM, PM (en_US);am, pm (de_DE) |
%M | Minute as a zero-padded decimal number. | 00, 01, …, 59 |
%S | Second as a zero-padded decimal number. | 00, 01, …, 59 |
%f | Microsecond as a decimal number, zero-padded on the left. | 000000, 000001, …, 999999 |
%z | UTC offset in the form ±HHMM[SS](empty string if the object is naive). | (empty), +0000, -0400, +1030 |
%Z | Time zone name (empty string if the object is naive). | (empty), UTC, EST, CST |
%j | Day of the year as a zero-padded decimal number. | 001, 002, …, 366 |
%U | Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. | 00, 01, …, 53 |
%W | Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. | 00, 01, …, 53 |
%c | Locale’s appropriate date and time representation. | Tue Aug 16 21:30:00 1988 (en_US);Di 16 Aug 21:30:00 1988 (de_DE) |
%x | Locale’s appropriate date representation. | 08/16/88 (None);08/16/1988 (en_US);16.08.1988 (de_DE) |
%X | Locale’s appropriate time representation. | 21:30:00 (en_US);21:30:00 (de_DE) |
%% | A literal ‘%’ character. | % |
Python datetime.strptime() Examples
7-May-2013 datetime Format
from datetime import datetime dateString = "7-May-2018" dateFormatter = "%u-%b-%Y" datetime.strptime(dateString, dateFormatter)
datetime.datetime(2018, 5, 1, 0, 0)
31/12/2018 datetime Format
from datetime import datetime dateString = "31/12/2013" dateFormatter = "%d/%m/%Y" datetime.strptime(dateString, dateFormatter)
datetime.datetime(2013, 12, 31, 0, 0)
Mon, July 16 2018 datetime Format
from datetime import datetime dateString = "31/12/2013" dateFormatter = "%d/%m/%Y" datetime.strptime(dateString, dateFormatter)
datetime.datetime(2013, 12, 31, 0, 0)
Monday, July 16, 2018 20:01:56 datetime Format
from datetime import datetime dateString = "Monday, July 16, 2018 20:01:56" dateFormatter = "%A, %B %d, %Y %H:%M:%S" datetime.strptime(dateString, dateFormatter)
datetime.datetime(2018, 7, 16, 20, 1, 56)
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
Related Article — Python String
- How to Remove Commas From String in Python
- How to Check a String Is Empty in a Pythonic Way
- How to Convert a String to Variable Name in Python
- How to Remove Whitespace From a String in Python
- How to Extract Numbers From a String in Python
Related Article — Python DateTime
- How to Convert Pandas Column to Datetime
- How to Get the Current Time in Python
- How to Get the Day of the Week in Python
- How to Find the Last Day of the Month Using Python
- How to Determine Leap Year in Python
1С 8.3 Преобразование строки в дату (+типовая функция) — Программист 1С Минск. Автоматизация бизнеса.
1С 8.3 Преобразование строки в дату (+типовая функция)
Данные > Примеры кода 1С > 1С 8.3 Дата и время
ПРИМЕРЫ КОДА 1С
Перейти в основной раздел:
Типовая экспортная функция преобразования строки в дату в 1С 8.3:
Функция СтрокаВДату (Знач ДатаСтрока )
ПозицияПробела = СтрНайти ( ДатаСтрока , » » , НаправлениеПоиска . СНачала );
Если ПозицияПробела > 0 Тогда
ДатаСтрока = Лев ( ДатаСтрока , ПозицияПробела — 1 );
КонецЕсли;
ДатаСтрока = СокрЛП ( СтрЗаменить ( ДатаСтрока , «.» , «» ));
ДатаСтрока = Сред ( ДатаСтрока , 5 ) + Сред ( ДатаСтрока , 3 , 2 ) + Лев ( ДатаСтрока , 2 );
Если СтрДлина ( ДатаСтрока ) = 6 Тогда
ДатаСтрока = «20» + ДатаСтрока ;
КонецЕсли;
ОписаниеТипа = Новый ОписаниеТипов ( «Дата» );
Результат = ОписаниеТипа . ПривестиЗначение ( ДатаСтрока );
Улучшенный аналог СтрокаВДату() от UHоldеr в 1С 8.3:
//Преобразование строки в дату/время с указанием строки форматирования.
//При ошибке преобразования генерируется исключение.
//Допустимые значения в строке форматирования:
// yyyy — год полностью
// yy — год сокращённо
// mm — месяц
// dd — день
// hh — часы
// nn — минуты
// ss — секунды
// Разделитель в исходной строке и строке форматирования может различаться.
//
// Параметры:
// ДатаСтрока — Строка — Исходная строка с датой
// ФорматДаты — Строка — Формат даты в переданной строке
//
// Возвращаемое значение:
// Дата
//
// Пример:
// СтрокаВДатуВремя(«02.06.22», «dd.mm.yy»)
// СтрокаВДатуВремя(«02.06.22 12:30:00, «dd.mm.yy hh:nn:ss»)
// СтрокаВДатуВремя(«02/06/22 12:30:00, «dd.mm.yy hh:nn:ss»)
Функция СтрокаВДатуВремя ( ДатаСтрока , ФорматДаты = «dd.mm.yyyy» ) Экспорт
Если ЗначениеЗаполнено ( ДатаСтрока ) Тогда
Попытка
Годы = СтрНайти ( ФорматДаты , «yyyy» );
Годы = ?( Годы = 0 , 0 , Число ( Сред ( ДатаСтрока , Годы , 4 )));
Если Годы = 0 Тогда
Годы = СтрНайти ( ФорматДаты , «yy» );
Годы = ?( Годы = 0 , 0 , Число ( «20» + Сред ( ДатаСтрока , Годы , 2 )));
КонецЕсли;
Месяцы = СтрНайти ( ФорматДаты , «mm» );
Дни = СтрНайти ( ФорматДаты , «dd» );
Часы = СтрНайти ( ФорматДаты , «hh» );
Минуты = СтрНайти ( ФорматДаты , «nn» );
Секунды = СтрНайти ( ФорматДаты , «ss» );
Возврат Дата (
?( Годы = 0 , 1 , Годы ),
?( Месяцы = 0 , 1 , Число ( Сред ( ДатаСтрока , Месяцы , 2 ))),
?( Дни = 0 , 1 , Число ( Сред ( ДатаСтрока , Дни , 2 ))),
?( Часы = 0 , 0 , Число ( Сред ( ДатаСтрока , Часы , 2 ))),
?( Минуты = 0 , 0 , Число ( Сред ( ДатаСтрока , Минуты , 2 ))),
?( Секунды = 0 , 0 , Число ( Сред ( ДатаСтрока , Секунды , 2 )))
)
Исключение
ВызватьИсключение «Ошибка преобразования строки «»» + ДатаСтрока + «»» в дату по формату «»» + ФорматДаты + «»»»
КонецПопытки;
Иначе
Возврат Неопределено
КонецЕсли;
КонецФункции // СтрокаВДатуВремя
Улучшенный аналог СтрокаВДату() от подписчика в 1С 8.3:
Функция ПреобразоватьСтрокуКДате (Знач СтрокаДаты ) Экспорт
Если ТипЗнч ( СтрокаДаты ) = Тип ( «Дата» ) Тогда
Возврат СтрокаДаты ;
ИначеЕсли ТипЗнч ( СтрокаДаты ) <> Тип ( «Строка» ) Или ПустаяСтрока ( СтрокаДаты ) Тогда
Возврат Дата ( 1 , 1 , 1 );
КонецЕсли;
СтрокаДаты = ВРег ( СтрокаДаты );
НеобходимоПриводитьКМестномуВремени = Ложь;
СимволРазделенияДаты = СтрНайти ( СтрокаДаты , «T» , НаправлениеПоиска . СКонца );
Если СимволРазделенияДаты = 0 Тогда
СимволРазделенияДаты = СтрНайти ( СтрокаДаты , » » , НаправлениеПоиска . СКонца );
КонецЕсли;
СмещениеЧасы = 0 ;
СмещениеМинуты = 0 ;
ВремяМеньшеUTC = Ложь;
Если СтрНайти ( СтрокаДаты , «Z» ) > 0 Тогда
НеобходимоПриводитьКМестномуВремени = Истина;
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «Z» , «.» );
ИначеЕсли СимволРазделенияДаты > 0 Тогда
СимволЧП = СтрНайти ( СтрокаДаты , «-» ,, СимволРазделенияДаты );
Если СимволЧП = 0 Или СимволЧП СимволЧП = СтрНайти ( СтрокаДаты , «+» ,, СимволРазделенияДаты );
Иначе
ВремяМеньшеUTC = Истина;
КонецЕсли;
Если СимволЧП <> 0 И СимволЧП > СимволРазделенияДаты Тогда
НеобходимоПриводитьКМестномуВремени = Истина;
ЧастьЧП = Сред ( СтрокаДаты , СимволЧП + 1 );
мЧастейДаты = СтрРазделить ( ЧастьЧП , «:» );
Попытка
СмещениеЧасы = ?( мЧастейДаты . Количество () > 0 , Число ( мЧастейДаты [ 0 ]), 0 );
СмещениеМинуты = ?( мЧастейДаты . Количество () > 1 , Число ( мЧастейДаты [ 1 ]), 0 );
Исключение
КонецПопытки;
СтрокаДаты = Лев ( СтрокаДаты , СимволЧП — 1 );
КонецЕсли;
КонецЕсли;
// Приведем к одному разделителю
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «-» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «+» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «/» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «\» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «T» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «Т» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «:» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «;» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , «,» , «.» );
СтрокаДаты = СтрЗаменить ( СтрокаДаты , » » , «.» );
ПреобразованнаяДата = Дата ( 1 , 1 , 1 );
Год = 1 ;
Месяц = 1 ;
День = 1 ;
Час = 0 ;
Минута = 0 ;
Секунда = 0 ;
мЧастейДаты = СтрРазделить ( СтрокаДаты , «.» , Ложь);
Если мЧастейДаты . Количество () = 1 Тогда
Попытка
ПреобразованнаяДата = Дата ( мЧастейДаты [ 0 ]);
Исключение
ПреобразованнаяДата = Дата ( 1 , 1 , 1 );
КонецПопытки;
Возврат ПреобразованнаяДата ;
ИначеЕсли мЧастейДаты . Количество () >= 3 Тогда
Попытка
Месяц = Число ( мЧастейДаты [ 1 ]);
Если СтрДлина ( мЧастейДаты [ 0 ]) = 4 Тогда
Год = Число ( мЧастейДаты [ 0 ]);
День = Число ( мЧастейДаты [ 2 ]);
ИначеЕсли СтрДлина ( мЧастейДаты [ 2 ]) = 4 Тогда
Год = Число ( мЧастейДаты [ 2 ]);
День = Число ( мЧастейДаты [ 0 ]);
Иначе
Год = Число (?( мЧастейДаты [ 2 ] >= 50 , Цел ( Год ( ТекущаяДата ()) / 100 ) — 1 ,
Цел ( Год ( ТекущаяДата ()) / 100 )) + мЧастейДаты [ 2 ]);
День = Число ( мЧастейДаты [ 0 ]);
КонецЕсли;
Час = ?( мЧастейДаты . Количество () > 3 , Число ( мЧастейДаты [ 3 ]), 0 );
Минута = ?( мЧастейДаты . Количество () > 4 , Число ( мЧастейДаты [ 4 ]), 0 );
Секунда = ?( мЧастейДаты . Количество () > 5 , Число ( мЧастейДаты [ 5 ]), 0 );
Исключение
Возврат ПреобразованнаяДата ;
КонецПопытки;
Иначе
Возврат ПреобразованнаяДата ;
КонецЕсли;
Попытка
ПреобразованнаяДата = Дата ( Год , Месяц , День , Час , Минута , Секунда );
Исключение
ПреобразованнаяДата = Дата ( 1 , 1 , 1 );
КонецПопытки;
Если Не ПреобразованнаяДата = Дата ( 1 , 1 , 1 ) И НеобходимоПриводитьКМестномуВремени Тогда
ТекущееСмещениеСек = СмещениеСтандартногоВремени ();
ТекСмещениеЧас = Цел ( ТекущееСмещениеСек / 3600 );
ТекСмещениеМин = Цел (( ТекущееСмещениеСек — ТекСмещениеЧас * 3600 ) / 60 );
ТекСмещениеМин = ?( ТекСмещениеМин < 0 , - 1 * ТекСмещениеМин , ТекСмещениеМин );
ТекущийЧП = СтрШаблон ( «GMT%1%2:%3» , ?( ТекСмещениеЧас >= 0 , «+» , «» ),
Формат ( ТекСмещениеЧас , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ),
Формат ( ТекСмещениеМин , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ));
ПришедшийЧП = СтрШаблон ( «GMT%1%2:%3» , ?( ВремяМеньшеUTC , «-» , «+» ),
Формат ( СмещениеЧасы , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ),
Формат ( СмещениеМинуты , «ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0» ));
Если ТекущийЧП = ПришедшийЧП Тогда
Возврат ПреобразованнаяДата ;
КонецЕсли;
Попытка
Если СмещениеЧасы <> 0 Или СмещениеМинуты <> 0 Тогда
ПреобразованнаяДата = УниверсальноеВремя ( ПреобразованнаяДата , ПришедшийЧП );
КонецЕсли;
ПреобразованнаяДата = МестноеВремя ( ПреобразованнаяДата , ТекущийЧП );
Исключение
КонецПопытки;
КонецЕсли;