.net core 6 on docker DateTime.TryParseExact 不适用于 en-GB 时区

问题描述 投票:0回答:1

我正在使用下面的 dockerfile 运行我的应用程序,日期转换在容器内不起作用,但它可以在 Windows 和 ubuntu 上运行,这里是失败的代码示例:

var culture = new CultureInfo("en-GB");

Console.WriteLine(DateTime.TryParseExact("SEP24", "MMMyy",  culture, DateTimeStyles.None, out var valueDate));
Console.WriteLine(valueDate);

它在其他系统上返回 true,但在容器内部它返回 false。

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build-env
WORKDIR /App
# Copy everything
COPY . ./

ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
ENV DOTNET_RUNNING_IN_CONTAINER=true

RUN apk add --no-cache tzdata
RUN apk add --no-cache  icu-data-full icu-libs

# just for exemple
RUN dotnet run

RUN dotnet restore
# Build and publish a release
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /App

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

COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]

我添加了tzdata,时区GB存在于容器中,但它没有解决问题。

c# docker datetime .net-core timezone
1个回答
0
投票

您使用的是

System.Globalization
Nuget 软件包吗?

我尝试重现您的问题,但无法重现。我创建了以下独立的 Dockerfile(不安装

tzdata
),它创建一个控制台应用程序并添加您的代码。

当我构建并运行它时

docker build -t test .
docker run --rm test

打印出来了

True
09/01/2024 00:00:00

我的 Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build-env
WORKDIR /App

# Create a console application and add System.Globalization Nuget package
RUN dotnet new console -n DotNet.Docker -o .
RUN dotnet add package System.Globalization --version 4.3.0

# Overwrite Program.cs with our own code
RUN cat <<EOF > Program.cs
using System.Globalization;
var culture = new CultureInfo("en-GB");
Console.WriteLine(DateTime.TryParseExact("SEP24", "MMMyy",  culture, DateTimeStyles.None, out var valueDate));
Console.WriteLine(valueDate);
EOF

# Restore and build
RUN dotnet restore
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /App

COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
© www.soinside.com 2019 - 2024. All rights reserved.