日付形式yyyy-MM-ddTHH:mm:ssZ


102

これはかなり単純なはずだと思いますが、取得できませんでした:(。この形式では、Zはタイムゾーンです
。Tは長い時間パターン です。
この形式で日付を取得するには、

DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ"));

C#で


私はこの質問が9年間続いていることを知っていますが、の受け入れられた答えUtcNow.ToString(s)+Zは間違っています。ISO8601はRoundTripオプションでサポートされてますToString("O")。また、受け入れられた回答は、実際の日時値(Kind = Localの場合)に夏時間のタイムゾーンが含まれる場合があるだけでなく、常にタイムゾーンZを与える日時のUTC値を使用することを指摘します。受け入れられた回答の変更を検討しますか?
Richardissimo 2018年

回答:


144

UTCの使用

ISO 8601MSDN日時形式

Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");

2009-11-13T10:39:35Z

Zが存在しているためであります

時刻がUTCの場合は、時刻の直後にスペースなしで「Z」を追加します。「Z」は、ゼロUTCオフセットのゾーン指定子です。したがって、「09:30 UTC」は「09:30Z」または「0930Z」として表されます。「14:45:15 UTC」は「14:45:15Z」または「144515Z」になります。

オフセットを含めたい場合

int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours;
string offset = string.Format("{0}{1}",((hours >0)? "+" :""),hours.ToString("00"));
string isoformat = DateTime.Now.ToString("s") + offset;
Console.WriteLine(isoformat);

注意すべき2つの点:+または-は時間の後に必要ですが、明らかに+は正の数では表示されません。ウィキペディアによると、オフセットは+ hh形式または+ hh:mmにすることができます。ほんの数時間にしました。

私の知る限り、RFC1123(HTTP日付、 "u"フォーマッター)はタイムゾーンオフセットを提供することを意図していません。すべての時間はGMT / UTCを想定しています。


涼しい。ただし、出力にはTZオフセットが含まれていませんか?
Neil Barnwell、

私はそれを追加しました-ドキュメントは「s」フォーマットはISO8601に基づいていると言っていますが、タイムゾーンが含まれているとは思いません。
Chris S

もちろん、UTCにはタイムゾーンがありません。ドー。彼は出力でタイムゾーン情報を求めています。たぶんDateTimeOffsetは彼が探しているものですか?
Neil Barnwell、

5
手動でZを追加するのは適切ではありません。適切な出力が得られるため、.ToString( "o")を使用する必要があります。ミリ秒に問題がある場合は、四捨五入する必要があります。Zを手動で追加すると、現地時間に追加すると誤った結果が生じる可能性がありますが、これは実際にはUTCではありません。
Tuukka Lindroos

67
Console.WriteLine(DateTime.UtcNow.ToString("o"));  
Console.WriteLine(DateTime.Now.ToString("o"));

出力:

2012-07-09T19:22:09.1440844Z  
2012-07-09T12:22:09.1440844-07:00

Console.WriteLine(DateTime.Now.ToString( "o"));を使用しました。おかげで
ジグラー

5
受け入れられた答えは、書式指定子「s」を使用し、UTC日付の最後にZを追加することです。ミリ秒が必要ない場合はそれで十分ですが、ミリ秒が必要な場合は、この回答が示すように「o」を使用する必要があります。「o」を使用すると、デフォルトでミリ秒が表示され、UTC日付の末尾にZがすでに追加されています。
ジム

1
DateTime.Now.ToString( "o")正しいオフセットを返すため、あらゆる種類の問題を解決します。
Mo Zaatar

12

「o」の形式は、DateTimeとDateTimeOffsetで異なります:(

DateTime.UtcNow.ToString("o") -> "2016-03-09T03:30:25.1263499Z"

DateTimeOffset.UtcNow.ToString("o") -> "2016-03-09T03:30:46.7775027+00:00"

私の最後の答えは

DateTimeOffset.UtcDateTime.ToString("o")   //for DateTimeOffset type
DateTime.UtcNow.ToString("o")              //for DateTime type

7

C#6+では、文字列補間を使用して、これをより簡潔にすることができます。

$"{DateTime.UtcNow:s}Z"

あなたは私の多くの時間を節約しました。シンプルで甘いソリューション。
Raju Paladiya

6

見て、ここで「U」と「S」のパターンで。1つ目は「T」区切り記号なし、2つ目はタイムゾーンサフィックスなしです。



5

1つのオプションは、「o」形式を使用して文字列に変換する前に、DateTimeをToUniversalTime()に変換することです。例えば、

var dt = DateTime.Now.ToUniversalTime();
Console.WriteLine(dt.ToString("o"));

それは出力します:

2016-01-31T20:16:01.9092348Z

2

Salesforce REST APIクエリの日時形式で正常に動作します

DateTime now = DateTime.UtcNow;
string startDate = now.AddDays(-5).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");   
string endDate = now.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");  
//REST service Query 
string salesforceUrl= https://csxx.salesforce.com//services/data/v33.0/sobjects/Account/updated/?start=" + startDate + "&end=" + endDate;

// https://csxx.salesforce.com/services/data/v33.0/sobjects/Account/updated/?start=2015-03-10T15:15:57Z&end=2015-03-15T15:15:57Z

問題なくSalesforceから結果を返します。


-6

あなたは物事を分割することができます、それはより多くのコードを必要とするでしょうが、あなたがそれを好きなように動作するでしょう:

DateTime year = DateTime.Now.Year;
DateTime month = DateTime.Now.Month;
DateTime day = DateTime.Now.Day;

ect。

最後に:

Console.WriteLine(year+month+day+etc.);

これは非常に大胆な方法ですが...


この答えは望ましい出力のようなものを何も生成しません
cja '24年

これは質問または私が欲しかったものを提供しませんでした... -1
ジグラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.