Asp.net mvc dotnet core跨平台(Windows&;CentOS)时区转换错误

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'。”

我有一个dotnet核心asp.net mvc应用程序,需要在UTC、中央时区和新加坡标准时间之间进行时区转换。我在windows开发环境中使用
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更具跨平台友好性,您可以使用此软件包: