c# - 在 Docker 上将 ASP.NET Core 2.2 中的默认时区更改为 24 小时制时间格式
问题描述
我想使用德语日期格式作为我的 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 小时日期时间格式。
我同意在大多数情况下,这应该由应用程序控制,它在例如用户指定的设置上使用不同的格式。由于这只是一个只适合我的简单应用程序,因此这是将服务器设置设置为我的本地化的最简单方法。从任何类型的设置中传递文化信息都会产生开销而没有优势。
但正如我所说,这仅适用于我的情况。在生产环境中,您可能希望指定文化并允许国际用户使用不同的文化。
推荐阅读
- android - 在 gradle 构建期间检索 AWS 数据
- ajax - Ajax laravel 不在控制台中返回单条记录,但在 html 中没有返回所有数据
- google-bigquery - 使用 Cloud Deployment Manager 创建 BigQuery 物化视图
- visual-studio-code - 在 Visual Studio Code 中设置全局环境变量
- powerbi - Power BI 桌面中的多列排序
- c++ - __USE_BSD 标志在哪里定义?
- javascript - 获取 ngx-owl-carousel 的产品构建错误
- xaml - 如何制作可更改的 Xamarin.Form Xaml 页面?
- python - 尝试使用条件公式在 python pandas 中构建迭代列
- c - C中浮点数据类型的结构(二进制格式)是什么?