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

本文关键字:时间 服务器 Facebook | 更新日期: 2023-09-27 18:04:42

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

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

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

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

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

我的代码:

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将处理字符串中的其他时区的例外,但从那时起只有"本地时间","通用时间"answers"未知时区"的概念。

我将使用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值也更容易,而不必担心它们是什么"类型"等。

事实上,我个人不会使用DateTimeOffset DateTime -我会使用OffsetDateTime从我的野田时间项目,但这是另一回事。