首页 > 解决方案 > 在日志中包含时区

问题描述

如何在日志中包含时区,以便条目显示如下:

2020-07-08 08:03:35.677 EST [INF] This is the entry text.

请注意,没有 UTC 参考;它已被替换为“EST”或适合时区的任何内容。

标签: c#timezoneserilog

解决方案


.NET 不提供发出时区缩写的内置方式。如果您真的需要它们,您可以导入我的TimeZoneNames库并执行以下操作:

static string GetTimeZoneAbbreviation(DateTimeOffset dto, TimeZoneInfo tzi)
{
    var abbreviations = TZNames.GetAbbreviationsForTimeZone(tzi.Id, CultureInfo.CurrentUICulture.Name);
    return tzi.IsDaylightSavingTime(dto) ? abbreviations.Daylight : abbreviations.Standard;
}

TimeZoneInfo.Local如果您输入了要使用的本地时区,则通过。

我将把它连接到 Serilog 到你(或其他人)。

也就是说 - 你可能想重新考虑你为什么想要这个。zzz在大多数情况下,在日志文件中首选与 UTC 的偏移量(使用说明符)。一个原因是并非每个时区都有唯一的缩写。

例如,如果"CST"出现在您的日志中,您如何知道是美国中部标准时间、古巴标准时间还是中国标准时间?没有偏移量,将无法分辨。

此外,请注意,并非每个时区都有缩写。许多时区,即使我的图书馆已经到位,也会返回一个偏移量来代替缩写词。

换言之,时区缩写的概念并未被普遍接受。这主要是西方的想法。


推荐阅读