用户在单独的文本框中输入日期和时间。然后我将日期和时间组合成一个日期时间。我需要将此日期时间转换为 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);
这导致了一个异常:
The conversion could not be completed because the supplied DateTime did not have the Kind property set correctly. For example, when the Kind property is DateTimeKind.Local, the source time zone must be TimeZoneInfo.Local
然后我尝试像这样设置 Kind 属性:
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Local);
这不起作用,所以我尝试了:
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Unspecified);
这也不起作用。谁能解释我需要做什么?我什至会以正确的方式解决这个问题吗?我应该使用 DateTimeOffset 吗?