将服务器时间更改为Facebook发送的本地时间
本文关键字:时间 服务器 Facebook | 更新日期: 2023-09-27 18:04:42
我正在使用Facebook c# SDK从我的Facebook页面获取一些数据。
当我得到数据对象时,我得到一个字段:
created_time : 2014-05-23T11:55:00+0000
由于它与我当前时间不相同,我如何将其转换为我当前时间或标准UTC时间?
我的代码:
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
从我的野田时间项目,但这是另一回事。