gpt4 book ai didi

c# - DateTime.TryParse 似乎正在丢失原始时区信息并转换为服务器时间

转载 作者:行者123 更新时间:2023-12-02 00:14:49 27 4
gpt4 key购买 nike

我有一个带有日期/时间控件的 ASP.Net 表单。如果由于验证错误而回发表单,日期/时间将转换为服务器时区并设置为日期/时间控件中的值 - 导致原始时区信息丢失。

我正在使用 DateTime.TryParse 将日期解析为服务器时间并且似乎正在丢失原始时区。我想检查页面是否为 PostBack 并尽可能跳过服务器时区转换 - 所以我保留原始值。

我尝试使用具有时区信息的 TryParseExact,但是我无法弄清楚我应该发送什么格式。

string hiddenDateTime = "2019-09-01T18:28:00.000+0800";
DateTime dateValue;
DateTime.TryParse(hiddenDateTime, CultureInfo.CurrentCulture,
DateTimeStyles.None, out dateValue);

有没有办法阻止这种转换为本地时区的发生并保持原始时区?

最佳答案

首先,这是如何DateTime.TryParse方法有效;

If s contains no time zone information, result contains a DateTime value whose Kind property is DateTimeKind.Unspecified when the method returns. If the string to be parsed contains time zone information, result contains a DateTime value whose Kind property is DateTimeKind.Local when the method returns.

DateTime 对象本身既不保留时区信息也不保留 UTC Offset值(value)。当您对字符串进行一些解析操作时,丢失这些值通常是正常的。

目前尚不清楚您试图获得什么值(value),但我建议您获得一些东西;

  1. 如果您使用 DateTimeStyles.AdjustToUniversal而不是 DateTimeStyles.None,您将获得 9/1/2019 10:28:00 AM 的日期时间,其中 Utc 作为 Kind 属性,因为这个枚举值正是它的用途。
  2. 除此之外,由于您的字符串具有 UTC 偏移值,我会将其解析为 DateTimeOffset而不是 DateTime。通过解析为 DateTimeOffset,您可以将它们都保留在 Offset 上和 DateTime属性。

关于c# - DateTime.TryParse 似乎正在丢失原始时区信息并转换为服务器时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com