c# - 如何使用 .NET 核心获取“以 UTC 表示的今天当地午夜”?
问题描述
我正在尝试使用 .NET Core 获取“UTC 本地午夜”的时间戳。
我写了这段代码:
var utcTimeStartLocalDay =
TimeZoneInfo.ConvertTimeToUtc(convertToLocalTimezone(DateTime.UtcNow).Date);
在哪里
public DateTime ConvertToLocalTimezone(DateTime dateTime)
{
return TimeZoneInfo.ConvertTime(dateTime, TimeZoneInfo.Utc,TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
}
因此,想法是获取 Utc 时间戳,将其转换为本地 TZ,然后获取 Date(即丢弃时间部分并有效地制作午夜时间戳)并转换回 Utc - 这应该给我本地时间。
但是,它并没有发生,因为第一个表达式的结果是打印时的 Utc 午夜。
小提琴:https ://dotnetfiddle.net/wJIXve
我需要在这里更正什么才能得到以 UTC 表示的当天当地午夜的答案(类似于前一天 22:00 UTC)?
编辑:只是为了澄清问题中的一个不清楚之处:“本地” TZ 我的意思是已知的本地时区(在代码中找到)
解决方案
为确保您绝对使用当地时间,我将使用以下代码:
DateTime localMidnight = DateTime.SpecifyKind(DateTime.Now.Date, DateTimeKind.Local);
然后只需使用.ToUniversalTime()
获取 UTC 日期:
DateTime localMidnightUtc = localMidnight.ToUniversalTime();
这是一个工作示例:
static async Task Main(string[] args)
{
DateTime localMidnight = DateTime.SpecifyKind(DateTime.Now.Date, DateTimeKind.Local);
DateTime localMidnightUtc = localMidnight.ToUniversalTime();
Console.WriteLine($"localMidnight: {localMidnight}");
Console.WriteLine($"localMidnightUTC: {localMidnightUtc}");
}
// Output:
// localMidnight: 29.01.2020 00:00:00
// localMidnightUTC: 28.01.2020 23:00:00
(现在你知道我在哪个时区了;)
推荐阅读
- javascript - 如何验证 JavascriptExecutor 是否选中了复选框
- amazon-web-services - 条件运算符不能与使用 concat 的列表值一起使用
- java - 如何在 gitlab 中检查代码覆盖率增量?
- css - 动画填充模式中断位置固定
- java - 列表如何
使用 findElements 时正在实现的接口? - angular - docker-compose:通过 Angular 应用程序“内部”访问后端服务
- python-3.x - 安装 pyzmail 时 pip 失败,错误代码为 1
- typescript - 将依赖注入应用到给定类型的实用程序类型?
- android - “如何修复 Android Q 中的 'java.lang.IllegalArgumentException: Font has been added' 错误?”
- terraform - 如何在“terraform”中创建带有时间戳的文件?