C# 使用Docker从开发到生产的不同转换日期
我正在我的C# 使用Docker从开发到生产的不同转换日期,c#,docker,.net-core,C#,Docker,.net Core,我正在我的.netcore3.1c#WebAPI应用程序的生产环境中使用Docker 我在Startup.cs中配置: var cultureInfo = new CultureInfo("it-IT"); CultureInfo.DefaultThreadCurrentCulture = cultureInfo; CultureInfo.DefaultThreadCurrentUICulture = cultureInfo; var supportedCultures = new[] {
.netcore3.1c#WebAPI
应用程序的生产环境中使用Docker
我在Startup.cs
中配置:
var cultureInfo = new CultureInfo("it-IT");
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
var supportedCultures = new[] { cultureInfo };
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("it-IT"),
// Formatting numbers, dates, etc.
SupportedCultures = supportedCultures,
// UI strings that we have localized.
SupportedUICultures = supportedCultures
});
在我的本地计算机中使用“it”
区域性调用API并转换日期:
Convert.ToDateTime("1976-10-30T23:00:00.000Z")
返回我期望的日期时间:“{31/10/1976 01:00:00}”
当我在生产中部署时,日期在中转换为“{30/10/1976 23:00:00}”
我认为Docker容器具有与本地机器不同的区域性,或者根本没有安装区域性
我的Docker文件如下所示:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1.101-buster AS build
WORKDIR /src
...
同时在本地计算机中运行此代码:
CultureInfo ci = CultureInfo.InstalledUICulture;
Log.Warning("Installed Language Info:{0}", ci.Name);
ci = CultureInfo.CurrentUICulture;
Log.Warning("Current UI Language Info: {0}", ci.Name);
ci = CultureInfo.CurrentCulture;
Log.Warning("Current Language Info: {0}", ci.Name);
我得到:
[10:06:17 WRN] Installed Language Info:it-IT
[10:06:17 WRN] Current UI Language Info: it-IT
[10:06:17 WRN] Current Language Info: it-IT
在Docker:
[10:12:08 WRN] Installed Language Info:
[10:12:08 WRN] Current UI Language Info: it-IT
[10:12:08 WRN] Current Language Info: it-IT
有人能给我一个提示吗?这可能与基础图像上缺少文化有关。这是阿尔卑斯山图片中描述的类似问题-
当时区丢失时,它将转到不变/UTC。这可能与基本图像上缺少区域性有关。这是阿尔卑斯山图片中描述的类似问题-
当时区丢失时,它将转到/UTC。据我所知,这不是文化问题,因为格式等不是问题。你的问题似乎是时区问题。每台机器都有一个本地时区,该时区由主机操作系统设置,您无法更改。您在生产环境中运行的docker服务器具有不同的时区。您必须将应用程序更改为使用DateTime.ToUniversalTime(如果可能),以使您的应用程序独立于时区。您找到了解决方案吗?据我所知,这不是区域性问题,因为格式等不是问题。你的问题似乎是时区问题。每台机器都有一个本地时区,该时区由主机操作系统设置,您无法更改。您在生产环境中运行的docker服务器具有不同的时区。您必须将应用程序更改为使用DateTime.ToUniversalTime(如果可能),以使您的应用程序独立于时区。您找到解决方案了吗?