回答:
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を想定しています。
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
「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
C#6+では、文字列補間を使用して、これをより簡潔にすることができます。
$"{DateTime.UtcNow:s}Z"
見て、ここで「U」と「S」のパターンで。1つ目は「T」区切り記号なし、2つ目はタイムゾーンサフィックスなしです。
このための単一行コード。
var temp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");
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から結果を返します。
あなたは物事を分割することができます、それはより多くのコードを必要とするでしょうが、あなたがそれを好きなように動作するでしょう:
DateTime year = DateTime.Now.Year;
DateTime month = DateTime.Now.Month;
DateTime day = DateTime.Now.Day;
ect。
最後に:
Console.WriteLine(year+month+day+etc.);
これは非常に大胆な方法ですが...
UtcNow.ToString(s)+Zは間違っています。ISO8601はRoundTripオプションでサポートされていますToString("O")。また、受け入れられた回答は、実際の日時値(Kind = Localの場合)に夏時間のタイムゾーンが含まれる場合があるだけでなく、常にタイムゾーンZを与える日時のUTC値を使用することを指摘します。受け入れられた回答の変更を検討しますか?