Aplikacja z obrazu aspnet:6.0 formatuje datę w nieodpowiedni sposób

Aplikacja z obrazu aspnet:6.0 formatuje datę w nieodpowiedni sposób
V3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
0

Dzień dobry,
w jaki sposób mogę rozwiązania problem z formatem daty, który używany jest w obrazie Docker. W moim przypadku jest to obraz ASP.NET Core (mcr.microsoft.com/dotnet/aspnet:6.0).
System w obrazie wyświetla dane w formacie dzień/miesiąc/rok, a moja aplikacja pracuje w systemie rok-miesiąc-dzień.
Wiem że mogę to rozwiązać od strony C#, ale chciałem się upewnić czy nie ma innej możliwości.
Pozdrawiam,
Łukasz

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
2

Nie dostarczył(a/e)ś większości informacji potrzebnych do rozwiązania Twojego problemu, ale…

Możesz ustawić ustawienia lokalizacji w Dockerze, na przykład, dodając ENV LC_TIME (co tam chcesz) do dockerfile’a. W szczególności, en_DK.UTF-8 zachowuje standard ISO 8601, czyli Y-MM-DD. Upewnij się też, że masz odblokowane odpowiednie ustawienie w /etc/locale.gen. Szczegóły zależą, m.in., od dystrybucji, na której bazujesz obraz.

V3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
0
Althorion napisał(a):

Nie dostarczył(a/e)ś większości informacji potrzebnych do rozwiązania Twojego problemu, ale…

Możesz ustawić ustawienia lokalizacji w Dockerze, na przykład, dodając ENV LC_TIME (co tam chcesz) do dockerfile’a. W szczególności, en_DK.UTF-8 zachowuje standard ISO 8601, czyli Y-MM-DD. Upewnij się też, że masz odblokowane odpowiednie ustawienie w /etc/locale.gen. Szczegóły zależą, m.in., od dystrybucji, na której bazujesz obraz.

Mam nadal problem z moją aplikacją :(
Zmieniłem format daty w obrazie Docker na właściwą postać.
![screenshot-20230809121031.png](https://4programmers.net/uploads/118852/jgOSw9eWIstIUq4ZPREfHOxtYAiCHsKvd9MTduNK.png
czyli teoretycznie jest ok.
Natomiast jak uruchamiam moją aplikację na Windowsie to dane wyświetlają się w takiej postaci:
screenshot-20230809121307.png
Update:
Dodam że w środowisku Deweloperskim data wyświetla się w prawidłowym dla mnie formacie czyli: YYYY-MM-DD.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
3

Ale co Ty próbujesz osiągnąć? Dlaczego aplikacja ma być przywiązana do jakiegoś konkretnego formatu daty?
Ogólnie, to żaden z tych formatów nie jest prawidłowy w Polsce.

Obraz dockera ma zapewne wymuszone en-US, dlatego ma najgłupszy z możliwych zapis daty. Pytanie, na jakim systemie ten obraz dockera bazuje?

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
2
virusek391 napisał(a):

a moja aplikacja pracuje w systemie rok-miesiąc-dzień.

Powinna pracować w formacie "żaden", bo na typie datowym.
Na nielicznych wejściach i wyjściach formatowanie do plików w zadanym standardzie (a najlepiej ISO)

virusek391 napisał(a):

Natomiast jak uruchamiam moją aplikację na Windowsie to dane wyświetlają się w takiej postaci:
Update:
Dodam że w środowisku Deweloperskim data wyświetla się w prawidłowym dla mnie formacie czyli: YYYY-MM-DD.

Przeczuwam, że walczymy z olbrzymim XY problemem, np w 2765 odcinku serialu się dowiemy, że "wyświetla się" dotyczy aplikacji JavaScriptowej.

V3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
0

Aplikacja została utworzona w ASP.NET Core, więc pobrałem obraz Dockera z tej strony: https://hub.docker.com/_/microsoft-dotnet-aspnet
Serwer Docker postawiony jest na Debianie i tutaj udało mi się ustawić format LC_TIM=en_DK.UTF-8
screenshot-20230809203607.png
Jednak z tego co widzę to prawdopodobnie problem występuje po uruchomieniu w aplikacji w samym Dockerze, ponieważ nie przyjmuje ustawień związanych z datą
Oto zawartość pliku Dockerfile:

Kopiuj
FROM asp_net_core_6
WORKDIR /Fronted
COPY /Fronted/ ./
WORKDIR /Backend
COPY /Backend/ ./
ENV LC_TIME="en_DK.UTF-8"
ENV DATE_FORMAT="%Y-%m-%d"

Update:
Obraz w dokerze również ma format daty YYYY-MM-DD. Więc z skąd on bierze taki dziwny układ w samej aplikacji MM/dd/yyyy?
screenshot-20230809232311.png

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
1
virusek391 napisał(a):

. Więc z skąd on bierze taki dziwny układ w samej aplikacji MM/dd/yyyy?

Z aplikacji. Mało ściśle napisanej aplikacji.
Zobaczymy jej źródła ?

(chciałem załączyć filmik z PRL-u, ale nie znalazłem)
W dobrze zaprojektowanej aplikacji rzadko (nie mówię, ze nigdy, bo czasem tak) powinieneś stanąć wobec problemu formatowania.
O ile to jest ważne, powinno być kontrolowane, każda funkcja formatująca oprócz swej najprostszej formy, ma formy wieloargumentowe, które nie dają automatyki wyboru.

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
1

Miałem podobną sytuację (chodziło co prawda nie tylko o datę, ale o całe locale) i oprócz ustawienia LANG czy tam LC_TIME, trzeba było jeszcze wygenerować locale przez localedef. Akurat na przykładzie pl_PL.UTF8, ale mój Dockerfile wyglądał tak:

Kopiuj
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i pl_PL -c -f UTF-8 -A /usr/share/locale/locale.alias pl_PL.UTF-8
ENV LANG pl_PL.UTF-8
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["TimeSlotFinder_Razor/TimeSlotFinder_Razor.csproj", "TimeSlotFinder_Razor/"]
COPY ["TimeSlotFinder_Logic/TimeSlotFinder_Logic.csproj", "TimeSlotFinder_Logic/"]
RUN dotnet restore "TimeSlotFinder_Razor/TimeSlotFinder_Razor.csproj"
COPY . .
WORKDIR "/src/TimeSlotFinder_Razor"
RUN dotnet build "TimeSlotFinder_Razor.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "TimeSlotFinder_Razor.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TimeSlotFinder_Razor.dll"]
V3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
0
Ktos napisał(a):

Miałem podobną sytuację (chodziło co prawda nie tylko o datę, ale o całe locale) i oprócz ustawienia LANG czy tam LC_TIME, trzeba było jeszcze wygenerować locale przez localedef. Akurat na przykładzie pl_PL.UTF8, ale mój Dockerfile wyglądał tak:

Kopiuj
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i pl_PL -c -f UTF-8 -A /usr/share/locale/locale.alias pl_PL.UTF-8
ENV LANG pl_PL.UTF-8
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["TimeSlotFinder_Razor/TimeSlotFinder_Razor.csproj", "TimeSlotFinder_Razor/"]
COPY ["TimeSlotFinder_Logic/TimeSlotFinder_Logic.csproj", "TimeSlotFinder_Logic/"]
RUN dotnet restore "TimeSlotFinder_Razor/TimeSlotFinder_Razor.csproj"
COPY . .
WORKDIR "/src/TimeSlotFinder_Razor"
RUN dotnet build "TimeSlotFinder_Razor.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "TimeSlotFinder_Razor.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TimeSlotFinder_Razor.dll"]

Niestety twój kod również nie pomógł w moim w przypadku, nawet jak pozmieniałem pl_PL.UTF-8 na en_DK.UTF-8 ale dzięki :)
Ja wcześniej miałem taką zawartość pliku Dockerfile:

Kopiuj
FROM mcr.microsoft.com/dotnet/aspnet:6.0

RUN apt-get update && apt-get install -y locales

# Ustawienie odpowiedniej lokalizacji czasowej
RUN echo "en_DK.UTF-8 UTF-8" > /etc/locale.gen && \
    locale-gen en_DK.UTF-8 && \
    update-locale LANG=en_DK.UTF-8 \
    update-locale LC_ALL="en_DK.UTF-8"
# Ustawienie zmiennej środowiskowej LC_TIME na en_DK.UTF-8
ENV LC_TIME="en_DK.UTF-8"


Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2202
1

@virusek391: moim skromnym zdaniem trochę od "złej" podchodzisz do problemu, skoro uważasz że jest źle to szukasz miejsca w którym ta data się wyświetla, próbujesz zrozumieć w jaki sposób kawałek obszaru pamięci komputera (zmienna) zostaje zamieniona na pixele. Format może być ustawiony a wiele sposobów dla systemu, środowiska, aplikacji, danego fragmentu kodu albo jako parametr funkcji (zależy co kto ma w swoim arsenale możliwości)

Takie ustawianie na chybił trafił niczego Cie nie nauczy a dodatkowo chatgpt za-indeksuje to jako potencjalne rozwiązanie dla innych :D

V3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
1

Ustawiłem formatowanie na poziomie aplikacji w miejscach gdzie było to wymagane.
Zajęło to 10 minut :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.