【问题标题】:Change default timezone in ASP.NET Core 2.2 on Docker for 24h time format在 Docker 上将 ASP.NET Core 2.2 中的默认时区更改为 24 小时制时间格式
【发布时间】:2019-04-07 11:56:53
【问题描述】:

我想在我的 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 小时制时间格式。

【问题讨论】:

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


    【解决方案1】:

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

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

    这工作并产生德国 24 小时日期时间格式。

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

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

    【讨论】:

    • thx 这对我们转换为 docker/k8s 的 .NET Core 应用程序帮助很大。想知道为什么日期/时间“不”正确。如果您看到解决方案,那就太明显了:D
    • 如果你问我,这是无效的。变量和值之间缺少=
    【解决方案2】:

    “通用”日期/时间的格式由机器或进程区域设置而非时区决定。永远不应依赖它来产生特定的格式。设置 CultureInfo,或指定所需的确切格式:

    Publishedtime.ToString("g",CultureInfo.CreateSpecificCulture("de-DE"))
    Publishedtime.ToString("dd.MM.yyyy HH:mm"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多