C# では、「2012-09-03T06:35:31Z」を Datetime に変換しようとしています。
Date = DateTime.ParseExact( "2012-09-03T06:35:31Z", ???);
関数の残りの部分を解析する方法がわかりません
形式が常に UTC であると指定され、 で示されているかどうかはわかりませんZ
。
もしそうなら、
DateTime.ParseExact(
yourDateString, @"yyyy\-MM\-ddTHH:mm:ss\Z",
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)
うまくいきます。
ただし、取り組んでいる標準で UTC が指定されていない場合、対処しなければならない入力は、たとえば2012-09-03T06:35:31+05:00
、2012-09-03T06:35:31+0500
使用している ISO 8601 形式に依存する可能性もありZ
ます+00:00
。その可能性を処理する必要がある場合は、最初に を作成しDateTimeOffset
、それから同等の UTCDateTime
を取得します。
DateTimeOffset.ParseExact(yourDateString,
new string[]{@"yyyy\-MM\-ddTHH:mm:sszzz",@"yyyy\-MM\-ddTHH:mm:ss\Z"},
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).UtcDateTime
をまだ使用していることに注意してくださいAssumeUniversal
。これは、2 番目の形式が「AZ がここに表示される」ことを示しているためですが、メソッドはそれを無視するため、この形式を明示的に UTC として解釈する必要があります。ただし、最初の形式では、zzz
はタイムゾーンを提供するため、AssumeUniversal
は無視されます。(または、別の言い方をすれば、別の言い方をするまでは普遍的であると想定しており、その形式は実際にそうではありません)。
//using System.Globalization; should be at top
Date = DateTime.ParseExact("2012-09-03T06:35:31Z", "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)
カスタムの日付と時刻の形式に関するドキュメントを参照してください。これはsortable formatに似ていますが、末尾に Z が付いています。
Xml 日付を解析しようとしているようです。この場合、XmlConvert クラスを使用することをお勧めします...
Date = System.Xml.XmlConvert.ToDateTime("2012-09-03T06:35:31Z", XmlDateTimeSerializationMode.Local);
XmlDateTimeSerializationMode を適切な値に変更する必要があります。