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.);
这是一个非常大胆的方式来处理它,但…