c# - 将 Docker 上 ASP.NET Core 2.2 中的默认时区更改为 24 小时时间格式

标签 c# docker asp.net-core localization timezone

我想使用德语日期格式作为我的 ASP.NET Core 2.2 应用程序的默认格式。在我的德语/布局的 Win10 机器上它可以工作,所以我假设必须在我的 Dockerfile 中设置时区。根据Alpine wiki ,我这样做了:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine3.9 AS build-env
ENV TZ=Europe/Berlin
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

RUN apk add tzdata \
        && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
        && echo "${TZ}" > /etc/timezone

COPY . ./
RUN dotnet publish -c Production -o dist
ENTRYPOINT ["dotnet", "./dist/MyApp.dll"]

根据 date 命令,这有效:

/app # date
Sun Apr  7 13:50:42 CEST 2019
/app # date -u
Sun Apr  7 11:50:40 UTC 2019

但是在我的模型中有一个来自数据库的 DateTime 对象

<td>@article.PublishedTime.ToString("g")</td>

我收到 4/7/19 12:16 AM,我的德国 Win10 机器显示 07.04.2019 00:16。为什么这不起作用?由于 ASP.NET Core 使用系统时区,它现在应该使用 linux 中设置的 24 小时时间格式。

最佳答案

发现我们需要设置语言,因为这是用于格式化的:

ENV TZ=Europe/Berlin
ENV LANG de_DE.UTF-8
ENV LANGUAGE ${LANG}
ENV LC_ALL ${LANG}

这有效并生成德语 24 小时日期时间格式。

我同意,在大多数情况下,这应该由应用程序控制,例如,应用程序使用不同的格式。用户指定的设置。由于这是一个仅对我而言的简单应用程序,因此这是将服务器设置设置为我的本地化的最简单方法。从任何类型的设置传递文化信息都会产生开销而没有优势。

但正如我所说,这只适用于我的情况。在生产环境中,您可能希望指定文化并允许国际用户使用不同的文化。

关于c# - 将 Docker 上 ASP.NET Core 2.2 中的默认时区更改为 24 小时时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55558759/

相关文章:

android - 从 docker 容器连接外部模拟器

angular - 访问项目文件夹之外的文件

c# - ASP.Net Core - 在哪里可以找到项目中已安装的 Nuget 包列表

c# - 使用 Task.WhenAll 但需要跟踪每个单独任务的成功

AzureAD 身份验证仅适用于本地

c# - 如何使用 IDisposable 修复内存泄漏

c# - 按指定顺序对字符串进行排序

c# - 使用 C# 撤消绑定(bind)对象中的更改

c# - ServiceStack 中的 Fluent Validation 没有错误消息

docker - 查看 Docker 中运行/停止容器的完整命令