Answers:
Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");
2009-11-13T10:39:35Z
该ž是因为存在
如果时间以世界标准时间(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);
需要注意的两件事:时间之后需要+或-,但显然+不会显示正数。根据维基百科,偏移量可以采用+ 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
DateTime与DateTimeOffset的“ o”格式不同:(
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
单行代码。
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;
等等。
最后:
Console.WriteLine(year+month+day+etc.);
不过,这是一种非常大胆的处理方式...
UtcNow.ToString(s)+Z是错误的。RoundTrip选项支持ISO8601ToString("O")。还要指出的是,接受的答案使用的是日期时间的UTC值,它将始终给出时区Z,而不是仅使用实际的日期时间值(如果Kind = Local)可能包含夏时制时区。考虑更改接受的答案?