更改DateTimeOffset.Offset属性?

VSO*_*VSO 2 c# datetimeoffset

我的最终目标是从客户端获得没有偏移的通用时间 - 只是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);
Run Code Online (Sandbox Code Playgroud)

结果如下:

3/17/2016 3:13:23 PM -04:00 
Run Code Online (Sandbox Code Playgroud)

它以某种方式调整了我本地(东方)偏移的时间.我不希望这种情况发生,我希望它只返回UTC时间,如下所示:

3/17/2016 3:13:23 PM +00:00
Run Code Online (Sandbox Code Playgroud)

PS我刚刚问了一个关于这个的问题,我道歉,因为我觉得它应该很容易,但我不明白.这应该非常简单,但看起来offset没有setter(除非我像往常一样完全缺少一些C#基础知识):

public TimeSpan Offset { get; }
Run Code Online (Sandbox Code Playgroud)

Dav*_*ych 5

这里有一个的过载ParseExact,你可以指定一个DateTimeStyles.其中一个值DateTimeValuesAssumeUniversal:

如果format不要求输入包含偏移值,则返回的DateTimeOffset对象将获得UTC偏移量(+00:00).

这基本上意味着"不要假设它是本地的,假设它是普遍的".假设local是默认值,这就是为什么你看到的结果是你正在调整为local.指定AssumeUniversal应该按照你想要的方式解析它.

DateTimeOffset clientLoginTime = DateTimeOffset.ParseExact
(timeStringFromClient, dateTimeOffsetPattern, CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal);
Run Code Online (Sandbox Code Playgroud)