Asp.net mvc dotnet core跨平台(Windows&;CentOS)时区转换错误
我有一个dotnet核心asp.net mvc应用程序,需要在UTC、中央时区和新加坡标准时间之间进行时区转换。我在windows开发环境中使用Asp.net mvc dotnet core跨平台(Windows&;CentOS)时区转换错误,asp.net-mvc,datetime,asp.net-core,centos7,timezone-offset,Asp.net Mvc,Datetime,Asp.net Core,Centos7,Timezone Offset,我有一个dotnet核心asp.net mvc应用程序,需要在UTC、中央时区和新加坡标准时间之间进行时区转换。我在windows开发环境中使用TimeZoneInfo.FindSystemTimeZoneById方法设置时区实例,并将该时区实例传递到TimeZoneInfo.ConvertTime中,以获取所需时区的时间。但是,当我将web应用程序部署到CentOS7时,会出现以下错误: “找不到文件'/usr/share/zoneinfo/Central Standard Time'。”
TimeZoneInfo.FindSystemTimeZoneById
方法设置时区实例,并将该时区实例传递到TimeZoneInfo.ConvertTime
中,以获取所需时区的时间。但是,当我将web应用程序部署到CentOS7时,会出现以下错误:
“找不到文件'/usr/share/zoneinfo/Central Standard Time'。”
我需要做什么才能使这两个平台都能工作
public TimeZoneInfo TimeZoneInstance
{
get
{
if (_timeZoneInstance == null)
{
try
{
_timeZoneInstance = TimeZoneInfo.FindSystemTimeZoneById(TimeZone);
}
catch
{
TimeZone = "Central Standard Time";
_timeZoneInstance = TimeZoneInfo.FindSystemTimeZoneById(TimeZone);
}
}
return _timeZoneInstance;
}
private set { _timeZoneInstance = value; }
}
public DateTime? GetUserTime(DateTime? utcTime = null)
{
if (utcTime == null)
return utcTime;
return TimeZoneInfo.ConvertTime(DateTime.SpecifyKind(utcTime.Value, DateTimeKind.Utc), TimeZoneInfo.Utc, TimeZoneInstance);
}
public DateTime? GetUtcTime(DateTime? localTime)
{
if (localTime == null)
return localTime;
return TimeZoneInfo.ConvertTime(localTime.Value, TimeZoneInstance, TimeZoneInfo.Utc);
}
Windows上的.NET Core使用IANA时区,而*nix上的.NET Core使用IANA时区
跨平台时区的最简单方法是使用IANA ID。使用NodeTime,您可以通过以下方式检索时区:
NodaTime.DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/Chicago");
时区ID列表位于:
NodaTime.DateTimeZoneProviders.Tzdb.Ids
您确实需要添加外部依赖项并使用
NodaTime.DateTimeZone
而不是TimeZoneInfo
。但是,在Microsoft提供全球解决方案之前,它比TimeZoneInfo更具跨平台友好性,您可以使用此软件包: