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