c++ builder XE4, 10.2 Tokyo > TDateTime > 2015 Oct 14のような表示 > 自作
動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
FormatString()を使って2015 Oct 14
のような表示にしたい。
参考
http://www.delphibasics.co.uk/RTL.asp?Name=FormatDateTime
Now().FormatString(L"yyyy mmm dd hh:nn:ss")
よくわからないが、上記を実行しても
Oct
でなく10
となってしまう場合がある。
mmmm
として試すと10月
となる時がある。
Locale関連の設定がJaとENで違うのかもしれない。
try1
上記で希望通りの動作にならないので自作することにした。
1つの方法は以下。
static const String kNumToShortName_tbl [][2] =
{
{"/01/", " Jan "},
{"/02/", " Feb "},
{"/03/", " Mar "},
{"/04/", " Apr "},
{"/05/", " May "},
{"/06/", " Jun "},
{"/07/", " Jul "},
{"/08/", " Aug "},
{"/09/", " Sep "},
{"/10/", " Oct "},
{"/11/", " Nov "},
{"/12/", " Dec "},
};
static String ToShortMonthName(String src)
{
String dst = src;
for(int idx=0; idx < 12; idx++) {
dst = StringReplace(dst, kNumToShortName_tbl[idx][0], kNumToShortName_tbl[idx][1], TReplaceFlags()<<rfReplaceAll);
}
return dst;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String srcs[] = {
L"2015/01/05 12:30:45",
L"2015/02/11 12:30:45",
L"2015/03/06 12:30:45",
L"2015/10/12 12:30:45",
};
String dst;
for(int mi=0; mi < 4; mi++) {
dst = ToShortMonthName(srcs[mi]);
Memo1->Lines->Add(srcs[mi] + L" --> " + dst);
}
}
結果
2015/01/05 12:30:45 --> 2015 Jan 05 12:30:45
2015/02/11 12:30:45 --> 2015 Feb 11 12:30:45
2015/03/06 12:30:45 --> 2015 Mar 06 12:30:45
2015/10/12 12:30:45 --> 2015 Oct 12 12:30:45
以下の前提条件が必要
1. 月の表記が/
で囲われている
2. 1桁の月は0つきで表示 (3月 -> /03/)
他の方法として、月をint型で取得して、配列のインデックスに返す方法などもある。
Author And Source
この問題について(c++ builder XE4, 10.2 Tokyo > TDateTime > 2015 Oct 14のような表示 > 自作), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/e4652cc5bedeaf6d8c75著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .