date格式yyyy-MM-ddTHH:mm:ssZ

我认为这应该是非常简单的,但不能得到:(在这种格式Z是时区。
T是很长的时间模式
我怎么能得到这个格式的date,除了使用

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

在C#

使用UTC

ISO 8601 ( MSDNdate时间格式 )

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

2009-11-13T10:39:35Z

Z在那里,因为

如果时间是UTC,则在没有空格的时间之后直接添加“Z”。 “Z”是UTC 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); 

需要注意的两件事情:时间过后需要+或 – 但显然+不显示正数。 根据维基百科,偏移量可以是+ hh格式或+ hh:mm。 我保持了几个小时。

据我所知, RFC1123 (HTTPdate,“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 

看这里 “u”和“s”模式。 首先没有“T”分隔符,第二个没有时区后缀。

在使用“o”格式转换为string之前,可以将DateTime转换为ToUniversalTime() 。 例如,

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

它会输出:

 2016-01-31T20:16:01.9092348Z 

单线代码为此。

 var temp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ"); 

“O”格式是不同的DateTime vs 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 

它使用Salesforce REST API查询date时间格式正常工作

 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返回结果没有任何问题。

在C#6中,您可以使用string插值并使其更简洁:

 $"{DateTime.UtcNow:s}Z" 

你可以把事情分开,这将需要更多的代码,但会按照你喜欢的方式工作:

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

等。

最后:

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

这是一个非常大胆的方式来处理它,但…