我的最终目标是从客户那里获得没有偏移的通用时间-仅UTC时间。我试图做到这一点是这样的:
Javascript:(new Date()).toUTCString()
,其输出记录为:Thu, 17 Mar 2016 15:13:23 GMT
,这正是我所需要的。
然后,将其带到服务器并尝试将其转换为DateTimeOffset
:
string dateTimeOffsetPattern = "ddd, dd MMM yyyy HH:mm:ss 'GMT'";
DateTimeOffset clientLoginTime = DateTimeOffset.ParseExact
(timeStringFromClient, dateTimeOffsetPattern, CultureInfo.InvariantCulture);
结果是:
3/17/2016 3:13:23 PM -04:00
它以某种方式为我的本地(东部)偏移量调整时间。我不希望这种情况发生,我希望它只是返回UTC时间,如下所示:
3/17/2016 3:13:23 PM +00:00
附言我只是问了另一个问题,对此我表示歉意,因为我觉得这应该很容易,但我不明白。这应该非常简单,但是看起来像offset doesn't have a setter(除非我像往常一样完全缺少一些C#基础知识):
public TimeSpan Offset { get; }
最佳答案
有一个overload of ParseExact
where you can specify a DateTimeStyles
. DateTimeValues
的值之一是AssumeUniversal
,它表示:
如果format不需要输入包含偏移量值,则为返回的DateTimeOffset对象指定UTC偏移量(+00:00)。
这基本上意味着“不要以为它是本地的,而应该是普遍的”。假定本地为默认值,这就是为什么您看到要调整为本地的结果的原因。指定AssumeUniversal
应该以您想要的方式对其进行解析。
DateTimeOffset clientLoginTime = DateTimeOffset.ParseExact
(timeStringFromClient, dateTimeOffsetPattern, CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal);
关于c# - 更改DateTimeOffset.Offset属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36065417/