我正在使用Facebook C#SDK从我的Facebook页面获取一些数据。
当我获得数据对象时,那时我得到一个字段:
created_time : 2014-05-23T11:55:00+0000
由于它与我当前的时间不一样,如何将其转换为我当前的时间或标准的UTC时间?
答案 0 :(得分:1)
对我来说代码:
DateTime.Parse("2014-05-23T11:55:00+0000").ToString()
返回
2014-05-23 12:55:00
因为'DateTime.Parse()`理解该字符串中的时区,并且默认情况下会产生本地时间。我的时区是爱尔兰夏令时,比UTC早一个小时,这意味着2014-05-23T12:55:00对我来说,根据你的时区,它将是一个不同的时间。
相反,要获得以UTC格式解析的时间(对于幕后的Web内容或存储而不是用户界面更有用),请使用DateTime.Parse("2014-05-23T11:55:00+0000").ToUniversalTime()
如果您需要处理运行代码的机器本地以外的时区或UTC,那么您需要使用DateTimeOffset
,但DateTimeParse
将处理其他时区的例外情况在字符串中,但从那时起只有“本地时间”,“通用时间”和“未知时区”的概念。
答案 1 :(得分:1)
我会使用DateTimeOffset.ParseExact
,指定格式字符串为不变文化:
DateTimeOffset value = DateTimeOffset.ParseExact(text, "yyyy-MM-dd'T'HH:mm:ssK",
CultureInfo.InvariantCulture);
由于以下原因,我强烈推荐使用DateTime.Parse
:
当然,前两个问题可以通过使用DateTime.ParseExact
并指定文化进行修复。
然后,您可以将其转换为您想要的当地时区或任何其他时区,包括您的系统本地时区。例如:
DateTimeOffset localTime = value.ToLocalTime(); // Applies the local time zone
或者如果您想要DateTime
:
DateTimeOffset localTime = value.ToLocalTime().DateTime;
它只是一行额外的代码,但它使您更清楚(IMO)您正在尝试做的事情。比较DateTimeOffset
值更容易,而不用担心什么" kind"他们是等等。
事实上,我不会亲自使用DateTimeOffset
或 DateTime
- 我会Noda Time使用OffsetDateTime
项目,但那是另一回事。