940

与えられた:

DateTime.UtcNow

ISO 8601準拠の形式で同じ値を表す文字列を取得するにはどうすればよいですか?

ISO 8601 では、多くの同様の形式が定義されていることに注意してください。私が探している特定の形式は次のとおりです。

yyyy-MM-ddTHH:mm:ssZ
4

18 に答える 18

919

読者への注意:何人かのコメント作成者が、この回答のいくつかの問題を指摘しています (特に最初の提案に関連しています)。詳細については、コメント セクションを参照してください。

DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");

カスタムの日時形式を使用すると、
2008-09-22T13:57:31.2311892-04:00のような日付になります。

別の方法は次のとおりです。

DateTime.UtcNow.ToString("o");

標準の「往復」スタイル(ISO 8601)を使用して
2008-09-22T14:01:54.9571247Zを提供します。

指定された形式を取得するには、次を使用できます。

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
于 2008-09-22T14:00:17.320 に答える
463

DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)「s」形式指定子はソート可能な日付/時刻パターンとして記述されているため、探しているものを提供する必要があります。ISO8601に準拠しています。

編集:Z OP が必要とするように最後に追加を取得するには、"o"代わりに を使用し"s"ます。

于 2008-09-22T14:06:48.913 に答える
104
DateTime.UtcNow.ToString("s")

2008-04-10T06:30:00 のようなものを返します

UtcNow明らかにUTC時刻を返すため、以下に害はありません。

string.Concat(DateTime.UtcNow.ToString("s"), "Z")
于 2008-09-22T13:59:20.367 に答える
48

使用する:

private void TimeFormats()
{
    DateTime localTime = DateTime.Now;
    DateTime utcTime = DateTime.UtcNow;
    DateTimeOffset localTimeAndOffset = new DateTimeOffset(localTime, TimeZoneInfo.Local.GetUtcOffset(localTime));

    //UTC
    string strUtcTime_o = utcTime.ToString("o");
    string strUtcTime_s = utcTime.ToString("s");
    string strUtcTime_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");

    //Local
    string strLocalTimeAndOffset_o = localTimeAndOffset.ToString("o");
    string strLocalTimeAndOffset_s = localTimeAndOffset.ToString("s");
    string strLocalTimeAndOffset_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");

    //Output
    Response.Write("<br/>UTC<br/>");
    Response.Write("strUtcTime_o: " + strUtcTime_o + "<br/>");
    Response.Write("strUtcTime_s: " + strUtcTime_s + "<br/>");
    Response.Write("strUtcTime_custom: " + strUtcTime_custom + "<br/>");

    Response.Write("<br/>Local Time<br/>");
    Response.Write("strLocalTimeAndOffset_o: " + strLocalTimeAndOffset_o + "<br/>");
    Response.Write("strLocalTimeAndOffset_s: " + strLocalTimeAndOffset_s + "<br/>");
    Response.Write("strLocalTimeAndOffset_custom: " + strLocalTimeAndOffset_custom + "<br/>");

}

出力

UTC
    strUtcTime_o: 2012-09-17T22:02:51.4021600Z
    strUtcTime_s: 2012-09-17T22:02:51
    strUtcTime_custom: 2012-09-17T22:02:51Z

Local Time
    strLocalTimeAndOffset_o: 2012-09-17T15:02:51.4021600-07:00
    strLocalTimeAndOffset_s: 2012-09-17T15:02:51
    strLocalTimeAndOffset_custom: 2012-09-17T22:02:51Z

ソース:

于 2012-09-17T22:10:00.750 に答える
44
System.DateTime.UtcNow.ToString("o")

=>

val it : string = "2013-10-13T13:03:50.2950037Z"
于 2013-10-13T13:05:08.947 に答える
29

「ラウンドトリップ ("O") 形式指定子」を含むいくつかのオプションがあります。

var date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("O"));
Console.WriteLine(date1.ToString("s", System.Globalization.CultureInfo.InvariantCulture));

出力

2008-03-01T07:00:00.0000000
2008-03-01T07:00:00

ただし、DateTime + TimeZone は、ブログ投稿DateTime and DateTimeOffset in .NET: Good practice and common pitfalls で説明されているように、他の問題を引き起こす可能性があります。

DateTime には、コードにバグを与えるように設計された無数のトラップがあります。

1.- DateTimeKind.Unspecified の DateTime 値は悪いニュースです。

2.- DateTime は、比較を行うときに UTC/Local を気にしません。

3.- DateTime 値は、標準のフォーマット文字列を認識しません。

4.- DateTime で UTC マーカーを持つ文字列を解析しても、UTC 時間が保証されません。

于 2015-07-06T16:11:29.530 に答える
16

私はただ使用しますXmlConvert

XmlConvert.ToString(DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);

タイムゾーンが自動的に保持されます。

于 2011-06-02T15:19:15.353 に答える
16

これらの回答のほとんどには、明らかに ISO 8601 でサポートされていないミリ秒/マイクロ秒が含まれています。正しい回答は次のようになります。

System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssK");
// or
System.DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssK");

参考文献:

于 2014-12-05T17:11:39.060 に答える
9

標準の書式指定子は、 DateTimeFormatInfo.SortableDateTimePatternプロパティ"s"によって定義されるカスタムの日付と時刻の書式文字列を表します。パターンは定義された標準 ( ISO 8601 ) を反映しており、プロパティは読み取り専用です。したがって、使用されるカルチャや提供される形式プロバイダーに関係なく、常に同じです。カスタム書式文字列は."yyyy'-'MM'-'dd'T'HH':'mm':'ss"

この標準の書式指定子を使用すると、書式設定または解析操作で常にインバリアント カルチャが使用されます。

MSDNから

于 2012-09-12T10:12:02.593 に答える
9

DateTime.UtcNow をyyyy-MM-ddTHH:mm:ssZの文字列表現に変換するには、DateTime 構造体の ToString() メソッドをカスタム書式設定文字列と共に使用できます。DateTime でカスタム フォーマット文字列を使用する場合は、単一引用符を使用して区切り記号をエスケープする必要があることに注意してください。

以下は、必要な文字列表現を返します。

DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", DateTimeFormatInfo.InvariantInfo)
于 2008-11-26T21:55:50.210 に答える
2

SharePoint 2010以降で開発している場合は、

using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
...
string strISODate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now)
于 2013-03-27T10:17:13.423 に答える