gpt4 book ai didi

c# - 将用户输入的日期时间转换为 UTC

转载 作者:太空狗 更新时间:2023-10-29 22:53:08 25 4
gpt4 key购买 nike

用户在单独的文本框中输入日期和时间。然后我将日期和时间组合成一个日期时间。我需要将此日期时间转换为 UTC 以将其保存在数据库中。我将用户的时区 ID 保存在数据库中(他们在注册时选择它)。首先,我尝试了以下方法:

string userTimeZoneID = "sometimezone"; // Retrieved from database
TimeZoneInfo userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(userTimeZoneID);

DateTime dateOnly = someDate;
DateTime timeOnly = someTime;
DateTime combinedDateTime = dateOnly.Add(timeOnly.TimeOfDay);
DateTime convertedTime = TimeZoneInfo.ConvertTimeToUtc(combinedDateTime, userTimeZone);

这导致了一个异常:

转换无法完成,因为提供的 DateTime 没有正确设置 Kind 属性。例如,当 Kind 属性为 DateTimeKind.Local 时,源时区必须为 TimeZoneInfo.Local

然后我尝试像这样设置 Kind 属性:

DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Local);

这行不通,所以我尝试了:

DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Unspecified);

这也没有用。谁能解释我需要做什么?我什至以正确的方式解决这个问题吗?我应该使用 DateTimeOffset 吗?

最佳答案

就像 DateTime 上的所有其他方法一样,SpecifyKind 不会更改现有 值 - 它返回一个 值。你需要:

combinedDateTime = DateTime.SpecifyKind(combinedDateTime,
DateTimeKind.Unspecified);

我个人建议使用 Noda Time在我相当有偏见的观点(我是主要作者)中,这使得这种事情变得更加清晰。您最终会得到以下代码:

DateTimeZone zone = ...;
LocalDate date = ...;
LocalTime time = ...;
LocalDateTime combined = date + time;
ZonedDateTime zoned = combined.InZoneLeniently(zone);
// You can now get the "Instant", or convert to UTC, or whatever...

“宽松”部分是因为当您将本地时间转换为特定时区时,由于 DST 更改,本地值可能在时区中无效或不明确。

关于c# - 将用户输入的日期时间转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920312/

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