将服务器时间更改为Facebook发送的本地时间

时间:2014-05-23 12:33:54

标签: c# datetime facebook-c#-sdk datetime-format

我正在使用Facebook C#SDK从我的Facebook页面获取一些数据。

当我获得数据对象时,那时我得到一个字段:

created_time : 2014-05-23T11:55:00+0000

由于它与我当前的时间不一样,如何将其转换为我当前的时间或标准的UTC时间?

2 个答案:

答案 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

  • 这总是使用不变的文化。它明确声明您想要使用本地文化,这可能有不同的默认日历系统等。
  • 这准确地指定了格式。如果数据变为" 10/06/2014 11:55:00"你会得到一个例外,这比默默猜测这是dd / MM / yyyy还是MM / dd / yyyy
  • 更好
  • 它准确地表示字符串中的数据:日期/时间和偏移量。然后,您可以使用该数据执行任何操作,但将这两个步骤分开则更清晰

当然,前两个问题可以通过使用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项目,但那是另一回事。