573 / 436 / 287
Регистрация: 05.04.2013
Сообщений: 1,962
1

Как перевести строку с определенным форматом в дату и время?

02.04.2018, 12:33. Показов 1400. Ответов 6
Метки нет (Все метки)

Имеется строка вида:
2017-03-07 02:02:48
Как грамотно извлечь из нее дату и время, а также час

Например я мог бы извлечь дату так:
Delphi
1
2
s := '2017-03-07 02:02:48';
DateTimePicker1.Date := StrToDate( Copy(s,9,2) + '.' + Copy(s,6,2) + '.' + Copy(s,1,4) );
Но наверняка есть более профессиональный способ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2018, 12:33
Ответы с готовыми решениями:

Как дату и время преобразовать в строку?
?

Как присваивать DATE к переменной с определенным форматом?
Проблема не как не пойму как присваивать DATE к переменной с определенным форматом? т.е. Пишу...

Перевести строку в дату
Имеем строку: $today = date('Y-m-d H:i:s', strtotime($cdate)); $cdate - строка вида 2015.04.01...

Перевести строку в дату
1С Предприятие 8.2 Управляемые формы Есть внешняя обработка с формой, на которой один реквизит...

6
Модератор
8351 / 5562 / 2265
Регистрация: 21.01.2014
Сообщений: 23,867
Записей в блоге: 3
02.04.2018, 12:52 2
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
const sdt: String = '2017-03-07 02:02:48';
var D: TDate;
    FS: TFormatSettings;
begin
 FS.DateSeparator := '-';
 FS.ShortDateFormat := 'yyyy-mm-dd';
 D := StrToDate(Trim(Copy(sdt, 1, Pos(' ', sdt) - 1)), FS);
 ShowMessage(DateToStr(D));
end;
Для времени - аналогично...
Миниатюры
Как перевести строку с определенным форматом в дату и время?  
1
573 / 436 / 287
Регистрация: 05.04.2013
Сообщений: 1,962
02.04.2018, 13:50  [ТС] 3
Сделал DateTime
Delphi
1
2
3
4
5
6
7
8
9
VAR
DT : TDateTime;
FS : TFormatSettings;
begin
FS.DateSeparator := '-';
FS.ShortDateFormat := 'yyyy-mm-dd';
FS.TimeSeparator := ':';
FS.ShortTimeFormat := 'hh:nn:ss';
DT := StrToDateTime('2017-03-07 01:01:44',FS);
1
Модератор
8351 / 5562 / 2265
Регистрация: 21.01.2014
Сообщений: 23,867
Записей в блоге: 3
02.04.2018, 15:55 4
Цитата Сообщение от AHBAR Посмотреть сообщение
FS.TimeSeparator := ':';
FS.ShortTimeFormat := 'hh:nn:ss';
В принципе это можно было не указывать, т.к. именно эти значения являются, априори, значениями по умолчанию...
0
573 / 436 / 287
Регистрация: 05.04.2013
Сообщений: 1,962
03.04.2018, 05:51  [ТС] 5
Цитата Сообщение от D1973 Посмотреть сообщение
В принципе это можно было не указывать, т.к. именно эти значения являются, априори, значениями по умолчанию...
я думал об этом, но конкретно без FS.TimeSeparator := ':';
Delphi
1
2
3
4
5
6
7
8
9
10
11
VAR
DT : TDateTime;
FS : TFormatSettings;
s:String;
begin
s :='2011-01-31 01:01:44';
FS.DateSeparator := '-';
FS.ShortDateFormat := 'yyyy-mm-dd';
//FS.TimeSeparator := ':';
DT := StrToDateTime(s,FS);
Edit1.Text := DateTimeToStr(DT);
например ответ выдается (это для самопроверки):
31.01.2011 1:00:00
А еще непонятно как из такой строки S СРавнить дату с датой из DateTimePicker, потому что код не работает (скрин):
Delphi
1
if DT = Pick1.Date then Label3.Caption := 'Дата совпала';
подозреваю что из-за того что:
Предупреждение: значение даты на один день меньше прошлого дня 19-ого столетия. Почему, точно, неясно.
А также пока не разобрался как из строки S найти только время, например
Delphi
1
if ЧасИз(s) = час ночи {или час дня или 15-ый час} then ...
Наверно легче использовать функция Copy... даже это будет проще чем DecodeDateTime
Миниатюры
Как перевести строку с определенным форматом в дату и время?  
0
Модератор
8351 / 5562 / 2265
Регистрация: 21.01.2014
Сообщений: 23,867
Записей в блоге: 3
03.04.2018, 06:14 6
Лучший ответ Сообщение было отмечено AHBAR как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses ..., DateUtils;
...
procedure TForm1.Button1Click(Sender: TObject);
const sdt: String = '2018-04-03 01:02:03';
var DT: TDateTime;
    FS: TFormatSettings;
begin
 Label1.Caption := sdt;
 FS.DateSeparator := '-';
 FS.TimeSeparator := ':';
 FS.ShortDateFormat := 'yyyy-mm-dd';
 FS.ShortTimeFormat := 'hh:nn:ss';
 DT := StrToDateTime(sdt, FS);
 Label2.Caption := IntToStr(HourOf(DT));
 if CompareDate(DT, DateTimePicker1.Date) = 0 then ShowMessage('Даты совпали') else ShowMessage('Даты не совпали');
end;
Миниатюры
Как перевести строку с определенным форматом в дату и время?  
1
573 / 436 / 287
Регистрация: 05.04.2013
Сообщений: 1,962
03.04.2018, 06:52  [ТС] 7
Спасибо, то что нужно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2018, 06:52
Помогаю со студенческими работами здесь

Как разделить колонку с форматом Дата/время на две - Дата и время
Здравствуйте. Подскажите пожалуйста, как разделить колонку с форматом Дата/время на две - Дата и...

Получить строку отображающую текущее время и дату
DateTime dateValue = new DateTime(); string t = dateValue.ToString(@"MM\/dd\/yyyy HH:mm") Вместо...

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

Как переконвертировать время из unix epoch формата в понятную дату и время?
Уважаемые форумчане! Не могу нигде найти адекватного решения обратной конвертации из формата unix...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru