.NET TIPS

日付や時刻を文字列に変換するには?

デジタルアドバンテージ
2004/08/27

 .NET Frameworkのクラス・ライブラリでは、日付や時刻の情報は、DateTime構造体(System名前空間)を使って扱うことができる。本稿では、このDateTimeオブジェクトを指定した形式の文字列に変換するための基本的な方法について示す。

標準書式指定とカスタム書式指定

 DateTime構造体には、日付や時刻の情報を文字列に変換するために、大きく次の3つの方法がある。

ToLongDateString、ToLongTimeString、ToShortDateString、ToShortTimeStringなどのメソッドを呼び出す

標準書式指定文字列(d、D、t、T、f、F、g、Gなど)をパラメータに指定して、ToStringメソッドを呼び出す

カスタム書式指定文字列(後述)をパラメータに指定して、ToStringメソッドを呼び出す

 に挙げたメソッドは、の方法によるToString("D")、ToString("T")、ToString("d")、ToString("t")などの呼び出しを置き換えたにすぎない(標準書式指定文字列については、リファレンス・マニュアルの標準のDateTime書式指定文字列を参照)。いずれにせよ、の方法はカルチャ情報に依存した文字列が出力される。つまり、例えば、

DateTime.Now.ToString("F")

を実行すると、その結果が日本語環境では「2004年8月24日 20:23:06」などになるが、英語環境では、これは「Tuesday, August 24, 2004 8:23:06 PM」といった値となる。

 カルチャ情報に依存した文字列表記は、単純に日時を画面に表示したい場合などには便利であるが、日時を文字列に変換してデータ項目の1つとして利用したいような場合(例えば、ファイル名として使用するために「20040824202306」という文字列を得たい場合)などには使えない。このような場合には、のカスタム書式指定文字列による文字列変換を利用すると、その出力形式を自由に指定することができる。

カスタム書式指定文字列による変換

 カスタム書式指定文字列では、書式指定子の組み合わせにより、独自の出力形式でDateTimeオブジェクトを文字列に変換できる。例えば次の例では、その結果が「20040824202306」などとなる。

DateTime.Now.ToString("yyyyMMddHHmmss")

 利用頻度の高いと思われる書式指定子を次にまとめた。

書式指定子 説明 出力例
yyyy 4けたの年 2004
yy 0埋め2けたの年 04
MM 0埋め2けたの月 08
dd 0埋め2けたの日 24
ddd 曜日の省略名(カルチャに依存)
dddd 曜日の完全名(カルチャに依存) 火曜日
HH 0埋め2けたの時間(24時間表記) 20
hh 0埋め2けたの時間(12時間表記) 08
mm 0埋め2けたの分 23
ss 0埋め2けたの秒 06

 ここでは固定幅で出力可能な書式指定子のみを挙げている(書式指定子の完全な一覧は、リファレンス・マニュアルの「カスタムDateTime書式指定文字列」などを参照)。

 上表の中では、月が「MM」、分が「mm」と、どちらも同じ「エム」であることに注意が必要だ。

 なお、曜日に置き換わる「ddd」および「dddd」の2つはカルチャ情報に依存している。例えば「火曜日」は、英語環境では「Tue」および「Tuesday」となる。

カスタム書式指定文字列を使用したサンプル・プログラム

 上記の書式指定子を使用してDateTimeオブジェクトを文字列に変換している簡単なサンプル・プログラムを次に示す。

// customdate.cs

using System;

public class CustomDateTime {
  static void Main() {

    DateTime now = DateTime.Now;

    Console.WriteLine(now); // 出力例:2004/08/24 20:23:06

    Console.WriteLine(now.ToString("yyyy/MM/dd HH:mm:ss"));
    Console.WriteLine(now.ToString("yyyyMMddHHmmss"));
    Console.WriteLine(now.ToString("yy年MM月dd日(ddd)"));
    Console.WriteLine(now.ToString("hh時mm分ss秒"));
    // 出力例:
    // 2004/08/24 20:23:06
    // 20040824202306
    // 04年08月24日(火)
    // 08時23分06秒

    Console.WriteLine("{0:yyyy/MM/dd HH:mm:ss}", now);
    Console.WriteLine("{0:yyyyMMddHHmmss}", now);
    Console.WriteLine(
      "{0:yy年MM月dd日(dddd)} {0:hh時mm分ss秒}", now);
    // 出力例:
    // 2004/08/24 20:23:06
    // 20040824202306
    // 04年08月24日(火曜日) 08時23分06秒
  }
}

// コンパイル方法:csc customdate.cs
カスタム書式指定文字列を使用したC#のサンプル・プログラム(customdate.cs)
 
' customdate.vb

Imports System

Public Class CustomDateTime
  Shared Sub Main()

    Dim now As DateTime = DateTime.Now

    Console.WriteLine(now) ' 出力例:2004/08/24 20:23:06

    Console.WriteLine(now.ToString("yyyy/MM/dd HH:mm:ss"))
    Console.WriteLine(now.ToString("yyyyMMddHHmmss"))
    Console.WriteLine(now.ToString("yy年MM月dd日(ddd)"))
    Console.WriteLine(now.ToString("hh時mm分ss秒"))
    ' 出力例:
    ' 2004/08/24 20:23:06
    ' 20040824202306
    ' 04年08月24日(火)
    ' 08時23分06秒

    Console.WriteLine("{0:yyyy/MM/dd HH:mm:ss}", now)
    Console.WriteLine("{0:yyyyMMddHHmmss}", now)
    Console.WriteLine( _
      "{0: yy年MM月dd日(dddd)} {0:hh時mm分ss秒}", now)
    ' 出力例:
    ' 2004/08/24 20:23:06
    ' 20040824202306
    ' 04年08月24日(火曜日) 08時23分06秒
  End Sub
End Class

' コンパイル方法:vbc customdate.vb
カスタム書式指定文字列を使用したVB.NETのサンプル・プログラム(customdate.vb)

 各サンプル・プログラムの後半は、書式指定項目(インデックス付きのプレースホルダ)を使用した例である(書式指定項目についての詳細はリファレンス・マニュアルの「書式指定項目」を参照)。

 なお、独自形式により出力された日時文字列をDateTimeオブジェクトに変換する方法については「TIPS:日付や時刻の文字列をDateTimeオブジェクトに変換するには?」で示している。End of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
カテゴリ:クラス・ライブラリ 処理対象:日付と時刻
使用ライブラリ:DateTime構造体(System名前空間)
関連TIPS:日付や時刻の文字列をDateTimeオブジェクトに変換するには?

この記事と関連性の高い別の.NET TIPS
日付や時刻の文字列をDateTimeオブジェクトに変換するには?
数値を右詰めや0埋めで文字列化するには?
DataGridViewコントロールで数値を3けた区切りで表示するには?
文字と文字列を変換するには?
文字列を数値に変換するには?(TryParse編)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

更新履歴
【2004/09/02】 関連TIPSとして「TIPS:日付や時刻の文字列をDateTimeオブジェクトに変換するには?」についての記述を追加しました。

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ


- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る
- PR -

ホワイトペーパーTechTargetジャパン

ソリューションFLASH

「ITmedia マーケティング」新着記事

ソーシャルメディアマーケティングのROI計測事例を紹介
さまざまなブランドがソーシャルメディアマーケティングを実行している。その一方で、自...

イオン、クックパッドで店舗の特売情報を配信 〜レシピも提案〜
イオンは4日から、東北エリアのイオン40店舗で、日本最大のレシピサイト「クックパッド」...

目立つ! 読まれる! ブログを作る4つのポイント
ブランドの認知度向上に向けて、ブログを活用している企業は多い。だが実際、あまたのブ...