我的最终目标是从客户那里获得没有偏移的通用时间-仅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/

10-13 08:13