2012-01-04 21 views
1

外部ソースからXMLファイルを解析していますが、それぞれに日付と時刻を含む2つの属性があります。私はこれらを日付として解析できる形式にするための最良の方法を探しています。その時点で私が試した方法ではエラーや結果が得られません。asp.net c# - 別々のソースから日付と時刻を結合/フォーマットします

日付は「20111215」の形式です。これは英国のyyyymmddです。 時刻は「1417 + 0000」と書式設定されていますが、これはGMTからの時間プラスオフセットですか?

基本的に私はこれらをイギリス時間に取得する必要があります。私は別の部分でDateTime.Parseを使用しようとしましたが、どちらも有効な形式ではないエラーを出します。 Tried String.Formatを日付部分に追加しましたが、それはまったく変更されませんでした。私は解析する前に2を組み合わせる必要があると推測しますが、それを受け入れられるようにするために何か他のことをする必要があるかどうかはわかりません。

助けてください。

+0

あなたは[ParseExact](http://msdn.microsoft.com/en-us/library/system.datetime.parseexact.aspx)試してみましたか? – Junaid

+0

助けを借りてくれてありがとうございました。以前はParseExactを見たことがありませんでした。 – Dave

答えて

0

日時にタイムゾーンを組み込むためのDateTimeOffsetを使用してください。

 string date = "20111215"; 
     string time = "1417+0500"; 

     string dateAndTime = date + time; 

     string format = "yyyyMMddHHmmzzz"; 

     CultureInfo provider = CultureInfo.InvariantCulture; 

     DateTimeOffset t = DateTimeOffset.ParseExact(dateAndTime, format, provider); 
+1

は魅力的に働いた、ありがとう – Dave

0

フィールドを連結すると、DateTime.TryParseExactを使用して、これらを解析してDateTimeにすることができます。

string input = string.Format("{0} {1}", dateString, timeString); 
DateTime parsed; 
if(DateTime.TryParseExact(input, 
          "yyyyMMdd HHmmK", 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out parsed)) 
{ 
    // parsed OK, use the parsed variable 
} 
+0

Kは何をしていますか? – Bas

+1

@BasB - ["K"カスタム書式指定子](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#KSpecifier) - タイムゾーン情報です。 – Oded

+0

"HHmmK"のKとオフセットを設定する場所は何ですか? –

-1

私は(私はそれをテストしていない)、これは動作するはずだと思う:

string dateString = "20111215"; 
string timeString = "1417+0000"; 
int year = int.Parse(dateString.Substring(0,4)); 
int month = int.Parse(dateString.Substring(4,2)); 
int day = int.Parse(dateString.Substring(6,2)); 

int hour = int.Parse(dateString.Substring(0,2)); 
int mins = int.Parse(dateString.Substring(2,2)); 

DateTime d = new DateTime(year, month, day, hour, mins, 0); 
+0

そして、タイムゾーンオフセット? – Oded

+0

時間オフセットを設定するには、d.AddHours([時と分と同じ方法で時間を解析し、正しいインデックスを使用する])を使用します。 GMTを表現するときには、文字列の "+"は " - "とすることができます。 –

0
string date = "20111215"; 
string time = "1417+0000"; 
string dateString = date + time;; 
string format = "yyyyMMddHHmmK"; 
// or something similar, I'm not sure about the timezone 

DateTime result = DateTime.ParseExact(dateString, 
             format, 
             CultureInfo.InvariantCulture);