Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/39: Рейтинг темы: голосов - 39, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 12.06.2015
Сообщений: 1

Преобразовать дату в строку

12.06.2015, 01:18. Показов 8783. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят нужно числовую дату преоразовать в строку.
Например
10.08.2015
в 10.августа.2015
C++ Builder
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2015, 01:18
Ответы с готовыми решениями:

Как преобразовать строку в дату?
К примеру есть Edit1->Text = "2010-04-28" Подскажите, как сделать чтобы год, месяц и день раскидать по переменным int y1, m1,...

где можно преобразовать дату(строку), которая приходит из input, в дату(число), чтобы дату задать в setFullYear
const FirstPage = (props) => { const = useState(''); const = useState(''); const = useState(''); const...

Преобразовать строку в дату
Есть строка s='2019-03-08 05:19:29.826600+03' нужно преобразовать в дату, не могу выбрать шаблон, проблема возникает с часовым...

18
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
12.06.2015, 02:03
Думаю можно и проще, но на вскидку пришел такой вариант

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <DateUtils.hpp>
 
AnsiString d,m,g;
d=DayOf(StrToDate("10.08.2015"));
m=MonthOf(StrToDate("10.08.2015"));
g=YearOf(StrToDate("10.08.2015"));
switch (StrToInt(m))
 {
     case 1: m="Январь";   break;
     case 2: m="Февраль";  break;
     case 3: m="Март";     break;
     case 4: m="Апрель";   break;
     case 5: m="Май";      break;
     case 6: m="Июнь";     break;
     case 7: m="Июль";     break;
     case 8: m="Август";   break;
     case 9: m="Сентябрь"; break;
     case 10: m="Октябрь"; break;
     case 11: m="Ноябрь";  break;
     case 12: m="Декарь";  break;
 }
 
ShowMessage(d+"."+m+"."+g);
0
Модератор
 Аватар для D1973
9909 / 6446 / 2455
Регистрация: 21.01.2014
Сообщений: 27,364
Записей в блоге: 3
12.06.2015, 04:47
Вот так как-то...
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int m = MonthOf(DateTimePicker1->Date) - 1;
  String s = LongMonthNames[m];
  if( m == 2 || m == 7)
    s += "a";
  else
    s = s.Delete(s.Length(), 1) + "я";
  s = String().sprintf("%d %s %d", DayOf(DateTimePicker1->Date), s, YearOf(DateTimePicker1->Date));
  ShowMessage(s);
}
Изображения
 
0
Модератор
 Аватар для D1973
9909 / 6446 / 2455
Регистрация: 21.01.2014
Сообщений: 27,364
Записей в блоге: 3
12.06.2015, 04:53
Да, забыл написать, что нужен этот вот хедер
C++
1
#include <DateUtils.hpp>
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
12.06.2015, 10:42
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Krigic, только не надо приведенный выше код пытаться запускать на НЕрусифицированной ОС. Получится вот такой казус:



Чтобы гарантированно работало на любой локализации (выдавало русский текст, в смысле) -
C++
1
2
3
4
5
6
7
8
9
10
11
12
String RuLongMonthNames[12] =
{
     L"Января", L"Февраля", L"Марта", L"Апреля", L"Мая", L"Июня",
     L"Июля", L"Августа", L"Сентября", L"Октября", L"Ноября", L"Декабря"
};
 
void __fastcall TForm1::Button48Click(TObject *Sender)
{
  int m = MonthOf(DateTimePicker1->Date) - 1;
  s = String().sprintf(L"%d %s %d", DayOf(DateTimePicker1->Date), RuLongMonthNames[m], YearOf(DateTimePicker1->Date));
  ShowMessage(s);
}
1
15.06.2015, 15:29

Не по теме:

Цитата Сообщение от volvo Посмотреть сообщение
Junя
Класс. :)

0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.06.2015, 20:49
SatanaXIII,
C++
1
2
3
4
5
6
7
8
9
10
11
12
String RuLongMonthNames[12] =
{
     L"Января", L"Февраля", L"Марта", L"Апреля", L"Мая", L"Июня",
     L"Июля", L"Августа", L"Сентября", L"Октября", L"Ноября", L"Декабря"
};
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
  int m = MonthOf(DateTimePicker1->Date) - 1;
  String s = String().sprintf(L"%d %s %d", DayOf(DateTimePicker1->Date), RuLongMonthNames[m], YearOf(DateTimePicker1->Date));
  ShowMessage(s);
}
У меня всё нормально с этим кодом потому что операционка руссифицирована
Миниатюры
Преобразовать дату в строку  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
15.06.2015, 22:34
Sasha, с этим кодом будет нормально на любой операционке.
1
0 / 0 / 0
Регистрация: 02.02.2022
Сообщений: 3
05.02.2022, 20:41
Dinkin, А можно наоборот пожалуйста что бы строка в дату тобишь 10.09.2010 в 10 сентября 2010
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
05.02.2022, 20:50
Dmytro_08042004, так в этой теме как раз то и обсуждается и выше предложили несколько вариантов.
0
0 / 0 / 0
Регистрация: 02.02.2022
Сообщений: 3
05.02.2022, 21:04
12 апреля 2010 ->12.04.2010 мне нужно вот так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AnsiString d,m,g;
d=("10.January.2015");
m=("10.January.2015");
g=("10.January.2015");
switch (StrToInt(m))
 {
     case 1: m="01";   break;
     case 2: m="Февраль";  break;
     case 3: m="Март";     break;
     case 4: m="Апрель";   break;
     case 5: m="Май";      break;
     case 6: m="Июнь";     break;
     case 7: m="Июль";     break;
     case 8: m="Август";   break;
     case 9: m="Сентябрь"; break;
     case 10: m="Октябрь"; break;
     case 11: m="Ноябрь";  break;
     case 12: m="Декарь";  break;
 }
 
ShowMessage(d+"."+m+"."+g);
}
тип наоборот месяц в число
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
05.02.2022, 21:27
Так как месяцы могут слагаться и тд, я могу только такой вариант предложить...может кто луче что предложит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String st = "12 апреля 2010";
 
    for(int i = 1; i < 13; i++)
        {
            String m;
 
            switch(i)
                {
                    case 1:  m = "Январ";    break;
                    case 2:  m = "Феврал";   break;
                    case 3:  m = "Март";     break;
                    case 4:  m = "Апрел";    break;
                    case 5:  m = "Май";      break;
                    case 6:  m = "Июн";      break;
                    case 7:  m = "Июл";      break;
                    case 8:  m = "Август";   break;
                    case 9:  m = "Сентябр";  break;
                    case 10: m = "Октябр";   break;
                    case 11: m = "Ноябр";    break;
                    case 12: m = "Декар";    break;
                }
 
            if(st.UpperCase().Pos(m.UpperCase()))
                {
                    String int_m = (i < 10) ? "0" + IntToStr(i) : IntToStr(i);
 
                    st = st.SubString(1,st.Pos(" ")-1) + "." + int_m + "." + st.SubString(st.LastDelimiter(" ") + 1,st.Length());
                    break;
                }
        }
 
    ShowMessage(st);
}
//---------------------------------------------------------------------------
1
0 / 0 / 0
Регистрация: 02.02.2022
Сообщений: 3
05.02.2022, 21:45
Спасибо тебе огромное

Добавлено через 12 минут
А можно что бы не стринг а например Edit ввоlилась дата?
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
05.02.2022, 21:48
C++
1
 String st = Edit1->text;
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
06.02.2022, 18:20
Так как у ТС-а названия месяцев в родительном (?) (вроде он, уже все подзабыл) падеже, то можно сравнивать с названиями вроде "января", "февраля", "марта" и т. д. Иначе в примере выше (пост №12) с "маем" возможны проблемы.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
06.02.2022, 18:59
Dinkin, что за ужас?

C++
1
2
3
4
5
6
7
8
9
10
11
#include <StrUtils.hpp>
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String s = Edit1->Text;
    String months[] = {L"января", L"февраля", L"марта", L"апреля", L"мая", L"июня",
                       L"июля", L"августа", L"сентября", L"октября", L"ноября", L"декабря"};
    TStringDynArray arr(SplitString(s, " "));
    String r = String().sprintf(L"%s.%02d.%s", arr[0], IndexText(arr[1], months, 12) + 1, arr[2]);
    ShowMessage(r);
}
Миниатюры
Преобразовать дату в строку  
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
06.02.2022, 19:10
gunslinger, Верно подмечено, но думаю ТС сообразит как скорректировать.

volvo, Ну вот как то так =(
0
2 / 2 / 1
Регистрация: 27.10.2019
Сообщений: 27
06.02.2022, 21:35
Цитата Сообщение от Dmytro_08042004 Посмотреть сообщение
А можно наоборот пожалуйста что бы строка в дату тобишь 10.09.2010 в 10 сентября 2010

Здесь надо понимать что "." это дате тайм сепаратор, и надо как минимум преобразовать то что у тебя там есть в настоящий дате тайм сепаратор.

C++
1
2
3
4
5
6
String __fastcall ReplaceDateTimeSeparator(String _date)
{
  //заменить . или , или - в FormatSettings.TimeSeparator
  //по хорошему найти всё что не число и заменить в тайм сепаратор
  // будет где-то 20 строк кода не больше
}

Далее

C++
1
2
3
4
// аккуратно, может выбросить exception если стринг не дата время 
TDateTime date("10.09.2010");
 
String output(date.FormatString("d mmmm yyyy"));

Имена месяцев будут в языке системы.
0
Модератор
 Аватар для D1973
9909 / 6446 / 2455
Регистрация: 21.01.2014
Сообщений: 27,364
Записей в блоге: 3
07.02.2022, 04:47
Цитата Сообщение от u666sa Посмотреть сообщение
может выбросить exception если стринг не дата время
а чего бы это не исключить сразу?
C++
1
if(!TryStrToDate("10.09.2010", date)) return;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2022, 04:47
Помогаю со студенческими работами здесь

Преобразовать строку в дату
Помогите пожалуйста не могу сделать, как преобразовать время в строку,работаю c Excel, надо вытащить с ячейки время указанное в ней и ...

Преобразовать строку в дату
каким образом можно преобразовать строку &quot;18 октября 2016 г.&quot; в дату??

Преобразовать строку в дату
Как преобразовать строку типа &quot;Ср Май 23 10:41:51 2018&quot; в дату? new Date('Ср Май 23 10:41:51 2018') пишет: Invalid Date

Как преобразовать строку в дату
Здравствуйте! Помогите пожалуйста, как преобразовать строку в дату на Visual C++

Преобразовать 6-ти символьную строку в дату
всем привет, задача, есть строка 6 символов.типа 010115 - означает первой января 2015 года. нужно в итоге получить первой января 2015...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru