Изменить часовой пояс по умолчанию в ASP.NET Core 2.2 в Docker для 24-часового формата времени - PullRequest
1 голос
/ 07 апреля 2019

Я хочу использовать немецкое форматирование даты по умолчанию для моего приложения 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 использует системный часовой пояс, теперь он должен использовать 24-часовой формат времени, установленный в Linux.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Выяснилось, что нам нужно установить язык, так как он используется для форматирования:

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

Это работает и производит немецкое 24-часовое форматирование DateTime.

Я согласен, что в большинствеВ таких случаях это должно контролироваться приложением, которое использует различные форматирования, например, указанные пользователем настройки.Поскольку это простое приложение только для меня, это самый простой способ установить настройки сервера для моей локализации.Передача информации о культуре из любого вида настроек приведет к дополнительным расходам без преимущества.

Но, как я уже сказал, это подходит только для моего случая.В продуктивной среде вы можете захотеть указать colture и разрешить использование разных культур для международных пользователей.

2 голосов
/ 07 апреля 2019

Форматирование «общей» даты / времени определяется машиной или языковым стандартом процесса, а не часовым поясом.Никогда не следует полагаться на создание определенного формата.Либо установите CultureInfo, либо укажите нужный формат:

Publishedtime.ToString("g",CultureInfo.CreateSpecificCulture("de-DE"))
Publishedtime.ToString("dd.MM.yyyy HH:mm"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...