ASP.NET MVC 将 DateTime 转换为 UTC 以发送到 API

我需要以 UTC 格式向 API 发送开始日期和结束日期,我尝试了以下方法:

DateTime startDate = Convert.ToDateTime(start + "T00:00:00Z").ToUniversalTime();
DateTime endDate = Convert.ToDateTime(end + "T23:59:59Z").ToUniversalTime();

但似乎他们没有转换为 UTC,将 startDate 和 endDate 转换为 UTC 的正确方法是什么?

开始是一个字符串,是 2018-08-31,结束日期也是一个字符串,是 2018-08-31 我在上面的代码中添加了时间以涵盖完整日期。


交互式爱情
浏览 264回答 3
3回答

隔江千里

假设您想endDate以 UTC 表示给定日期的最后可能时刻:DateTime startDate = DateTime.ParseExact(start, "yyyy-MM-dd", CultureInfo.InvariantCulture,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);DateTime endDate = DateTime.ParseExact(end, "yyyy-MM-dd", CultureInfo.InvariantCulture,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .AddDays(1).AddTicks(-1);其他几件事:ToUniversalTime从计算机的本地时区转换为 UTC&nbsp;(除非.Kind == DateTimeKind.Utc)。除非计算机的本地时区与您的情况相关,否则您通常应该避免使用它。在上面的代码中,您需要AssumeUniversal表明输入日期将被解释为 UTC,并AdjustToUniversal表明您希望输出值保持为 UTC 而不是计算机的本地时区。UTC 不是“格式”。您的组合日期和时间字符串将采用 ISO 8601 扩展格式(也符合 RFC 3339)。一般尽量不要使用Convert.ToDateTime。它相当于DateTime.ParsewithCultureInfo.CurrentCulture和 no&nbsp;DateTimeStyles。这可能适用于某些情况,但通常最好更具体一些。.AddDays(1).AddTicks(-1)是否可以让您到达该日期的最后一个可表示的刻度。这允许在开始和结束之间进行包容性比较,但它的缺点是无法减去两个值并获得整个 24 小时。因此,通常最好只跟踪00:00一天到00:00第二天,然后在结束日期使用排他比较。(只有开始日期应该包含比较。)换句话说,而不是:2018-08-31T00:00:00.0000000Z&nbsp;<=&nbsp;someValueToTest&nbsp;<=&nbsp;2018-08-31T23:59:59.9999999Z做这个:2018-08-31T00:00:00.0000000Z&nbsp;<=&nbsp;someValueToTest&nbsp;<&nbsp;2018-09-01T00:00:00.0000000Z

冉冉说

首先从 NuGet 包管理器安装以下包并在您的项目中引用它:Install-Package Newtonsoft.Json现在您可以轻松地使用JsonConvert.SerializeObject(object value)方法将任何对象序列化为 Json。用于将 DateTime 转换为 UTC 使用TimeZoneInfo.ConvertTimeToUtc(DateTime dateTime)方法。在你的情况下:DateTime date = DateTime.Parse("2018-08-31");DateTime dateTimeToUtc = TimeZoneInfo.ConvertTimeToUtc(date);string dateInJson = JsonConvert.SerializeObject(dateTimeToUtc);变量 dateInJson 将具有类似的值2018-08-30T19:30:00Z。

jeck猫

删除 Z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;start&nbsp;=&nbsp;"2018-08-31";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;end&nbsp;=&nbsp;"2018-08-31"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;startDate&nbsp;=&nbsp;Convert.ToDateTime(start&nbsp;+&nbsp;"T00:00:00"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;endDate&nbsp;=&nbsp;Convert.ToDateTime(end&nbsp;+&nbsp;"T23:59:59"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(startDate);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;8/31/2018&nbsp;12:00:00&nbsp;(Local) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(startDate.ToUniversalTime());&nbsp;//&nbsp;8/31/2018&nbsp;5:00:00&nbsp;(UTC) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(endDate);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;8/31/2018&nbsp;11:59:59&nbsp;(Local) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(endDate.ToUniversalTime());&nbsp;&nbsp;&nbsp;//&nbsp;9/1/2018&nbsp;4:59:59&nbsp;(UTC)
打开App,查看更多内容
随时随地看视频慕课网APP