【マルチ言語】日時の取得とカスタム書式のフォーマット方法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

久しぶりに戻ってくる言語だと忘れがちです。

しかも各言語によっては工夫しないといけないこともあるので意外と厄介。

日付のフォーマットをいじるのはログの記録や保存ファイル名に使う等、業務系のプログラム開発では意外と使う場面があります。

C#の場合

.net系の場合には、DateTime型からString型にキャストする際に書式を指定する事ができます。
月を表すMMだけ大文字なのは、小文字にすると時間を表す分の方で認識されてしまうためです。
言語に慣れないうちはこの辺りを理解しておらず、よく間違えました。

//2020/01/01 00:00:00
string result = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

//2020/01/01
string result = DateTime.Now.ToString("yyyy/MM/dd");

//20200101000000
string result = DateTime.Now.ToString("yyyyMMddHHmmss");

//20200101
string result = DateTime.Now.ToString("yyyyMMdd");

VB.netの場合

'2020/01/01 00:00:00
Dim result as string = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")

'2020/01/01
Dim result as string = DateTime.Now.ToString("yyyy/MM/dd")

'20200101000000
Dim result as string = DateTime.Now.ToString("yyyyMMddHHmmss")

'20200101
Dim result as string = DateTime.Now.ToString("yyyyMMdd")

バッチの場合

バッチの場合は日付と時間を表す環境変数があるのですが、書式を変えたいとなると工夫が必要になります。

特にファイル名で使用したい場合にそのままだと/が入っていて使えないため、考慮が必要となります。

rem 2020/01/01 00:00:00
echo %date% %time%

rem 2020/01/01
echo %date%

rem 20200101000000
echo %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

rem 20200101
echo %date:~0,4%%date:~5,2%%date:~8,2%

PoweShellの場合

PowerShellの場合は書き方が若干異なりますが、ほとんど.netと同じ考えで実現できます。

#2020/01/01 00:00:00
Get-Date -Format "yyyy/MM/dd HH:mm:ss"

#2020/01/01
Get-Date -Format "yyyy/MM/dd"

#20200101000000
Get-Date -Format "yyyyMMddHHmmss"

#20200101
Get-Date -Format "yyyyMMdd"

SQLServerの場合

ストアドプロシージャでは実現方法がいくつかありますが、.netと同じようにフォーマットを指定する方法で紹介します。

convertで他の型に変換しながら書式変更する方法もあるのですがここで紹介しているような書式すべてをカバーできなかったため割愛しています。

--2020/01/01 00:00:00
select FORMAT(GETDATE(),'yyyy/MM/dd HH:mm:ss')

--2020/01/01
select FORMAT(GETDATE(),'yyyy/MM/dd')

--20200101000000
select FORMAT(GETDATE(),'yyyyMMddHHmmss')

--20200101
select FORMAT(GETDATE(),'yyyyMMdd')

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。