連載
» 2004年09月03日 05時00分 公開

.NET TIPS:日付や時刻の文字列をDateTimeオブジェクトに変換するには?

[遠藤孝信,デジタルアドバンテージ]
.NET TIPS
Insider.NET


「.NET TIPS」のインデックス

連載目次

 「TIPS:日付や時刻を文字列に変換するには?」では、DateTime構造体(System名前空間)のオブジェクトを、カスタム書式指定により独自の形式の文字列に変換する方法について示した。

 本稿では、これとは逆に、独自形式の日付や時刻の文字列をDateTimeオブジェクトに変換する方法について示す。なお、本稿で扱う文字列は、その形式が完全に固定されたもののみを想定している(例えば「2004/08/24 20:23:06」や「200408242123」など)。

ParseExactメソッドによる文字列の変換

 DateTime構造体には、文字列を変換するためのメソッドとして、ParseメソッドとParseExactメソッドが用意されているが、前者のParseメソッドはカルチャ情報を使用して出力された文字列を、同じカルチャ情報を使用してDateTimeオブジェクトに変換するためのものである。独自の形式を持った文字列を扱う場合には、後者のParseExactメソッドを使用しなければならない。

 ParseExactメソッドでは、次のように、第1パラメータには入力文字列を、第2パラメータには入力文字列の形式をカスタム書式指定文字列により指定する。メソッドの戻り値はDateTime型である。

DateTime.ParseExact("2004/08/24 20:23:06", "yyyy/MM/dd HH:mm:ss", null);



 第3パラメータには、カルチャ固有の書式情報を提供するIFormatProviderオブジェクトを指定するが、第2パラメータで指定したカスタム書式指定文字列にカルチャ依存の書式指定子が含まれていない場合はnull(VB.NETの場合にはNothing)でよい*

* 実際には、これはデフォルトのカルチャ情報(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat)を指定した場合と同じである。


 ParseExactメソッドの第2パラメータで指定するカスタム書式指定文字列を記述するために、よく利用されると思われる書式指定子を次にまとめた。

書式指定子 説明 入力例
yyyy 4けたの年 2004
yy 0埋め2けたの年 04
MM 0埋め2けたの月 08
dd 0埋め2けたの日 24
HH 0埋め2けたの時間(24時間表記) 20
hh 0埋め2けたの時間(12時間表記) 08
mm 0埋め2けたの分 23
ss 0埋め2けたの秒 06

 ここでは固定幅でかつカルチャ情報に依存しない書式指定子のみを挙げている(書式指定子の完全な一覧は、リファレンス・マニュアルの「カスタムDateTime書式指定文字列」などを参照)。

日時文字列をDateTimeオブジェクトに変換するサンプル・プログラム

 ParseExactメソッドを利用して、日時文字列をDateTimeオブジェクトに変換する簡単なサンプル・プログラムを次に示す。

// dateparse.cs

using System;

public class DateTimeParse {
  static void Main() {

    string d, f;
    DateTime dt;

    d = "2004/08/24 20:23:06";
    f = "yyyy/MM/dd HH:mm:ss";
    dt = DateTime.ParseExact(d, f, null);

    Console.WriteLine(dt.ToString("F"));
    // 出力:2004年8月24日 20:23:06

    d = "20040824202306";
    f = "yyyyMMddHHmmss";
    dt = DateTime.ParseExact(d, f, null);

    Console.WriteLine(dt.ToString("F"));
    // 出力:2004年8月24日 20:23:06

    d = "2004年08月24日20時23分06秒";
    f = "yyyy年MM月dd日HH時mm分ss秒";
    dt = DateTime.ParseExact(d, f, null);

    Console.WriteLine(dt.ToString("F"));
    // 出力:2004年8月24日 20:23:06
  }
}

// コンパイル方法:csc dateparse.cs

日時文字列をDateTimeオブジェクトに変換するC#のサンプル・プログラム(dateparse.cs)
dateparse.csのダウンロード

' dateparse.vb

Imports System

Public Class CustomDateTime
  Shared Sub Main()

    Dim d, f As String
    Dim dt As DateTime

    d = "2004/08/24 20:23:06"
    f = "yyyy/MM/dd HH:mm:ss"
    dt = DateTime.ParseExact(d, f, Nothing)

    Console.WriteLine(dt.ToString("F"))
    ' 出力:2004年8月24日 20:23:06

    d = "20040824202306"
    f = "yyyyMMddHHmmss"
    dt = DateTime.ParseExact(d, f, Nothing)

    Console.WriteLine(dt.ToString("F"))
    ' 出力:2004年8月24日 20:23:06

    d = "2004年08月24日20時23分06秒"
    f = "yyyy年MM月dd日HH時mm分ss秒"
    dt = DateTime.ParseExact(d, f, Nothing)

    Console.WriteLine(dt.ToString("F"))
    ' 出力:2004年8月24日 20:23:06
  End Sub
End Class

' コンパイル方法:vbc dateparse.vb

日時文字列をDateTimeオブジェクトに変換するVB.NETのサンプル・プログラム(dateparse.vb)
dateparse.vbのダウンロード

 なお、指定した形式に合致しない日時文字列をパラメータとして渡した場合には例外が発生する。

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


「.NET TIPS」のインデックス

.NET TIPS

Copyright© 1999-2018 Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。