DateTIme.ToString 在 localhost 和 Azure 中返回不同的结果

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

我们有一个 ASP.NET Core 8 网站:

  • 我们已将文化设置为
    da-DK
  • Startup
    内的C#代码中,它显示
    TimeSeparator
    ':'
    DateSeperator
    '-'
  • 在使用
    System.Threading.Thread.CurrentThread.CurrentCulture
    的 MVC 视图中,它显示
    TimeSeparator
    '.'
    DateSeperator
    '.'

如果我创建

DateTime.ToString("dd-MM-yyyy HH:mm")
,它将在 MVC 视图中返回
dd.MM.yyyy HH.mm
形式的字符串,但在项目其他地方的非 Razor C# 代码中返回
dd-MM-yyyy HH:mm
形式的字符串。

代码是.net 8,这个bug是前几天突然出现的。

这是我在我看来使用的代码,用于查看实际作为文化传递的值和

ToString()

@using System.Threading

<div style="display:none;">
    <p>@Thread.CurrentThread.CurrentCulture.Name</p>
    <p>@Thread.CurrentThread.CurrentCulture.DateTimeFormat.TimeSeparator</p>
    <p>@Thread.CurrentThread.CurrentCulture.DateTimeFormat.DateSeparator</p>
    <p>@DateTime.Now.ToString("dd-MM-yyyy HH:mm")</p>
</div>

这是我在Azure中得到的结果:

<div style="display:none;">
    <p>da-DK</p>
    <p>.</p>
    <p>.</p>
    <p>09-11-2024 23.20</p>
</div>

这是我在本地主机中得到的结果

<div style="display:none;">
    <p>da-DK</p>
    <p>:</p>
    <p>-</p>
    <p>09-11-2024 23:44</p>
</div>

我的

Startup.cs
里有这个:

      var cultureInfo = new CultureInfo("da-DK");
      cultureInfo.DateTimeFormat.TimeSeparator = ":";
      cultureInfo.DateTimeFormat.DateSeparator = "-";
      var supportedCultures = new CultureInfo[] { cultureInfo };
    
      app.UseRequestLocalization(new RequestLocalizationOptions
      {
          DefaultRequestCulture = new RequestCulture(supportedCultures[0]),
          SupportedCultures = supportedCultures,
          SupportedUICultures = supportedCultures
      });

如果我在后端执行相同的操作,它会返回预期结果

dd-MM-yyyy HH:mm

我认为我不能做得比这更好,我无法解释。

整个事情是在最新上传后两天开始的。

我尝试测试RequestCulture,这是我在Azure中得到的结果(LocalHost按预期返回):

@{
var requestCulture= HttpContextAccessor.HttpContext.Features.Get<Microsoft.AspNetCore.Localization.IRequestCultureFeature>().RequestCulture.Culture;
}

<div style="display:none;">
    <p>da-DK</p>
    <p>.</p>
    <p>.</p>
    <p>10-11-2024 00.42</p>
    <p>da-DK</p>
    <p>:</p>
    <p>-</p>
</div>

Azure Web 应用程序正在运行此计划: enter image description here

datetime .net-8.0
1个回答
0
投票

我设法通过创建这个属性来解决这个问题

 private CultureInfo Culture
    {
        get
        {
            var cultureInfo = new CultureInfo("da-DK");
            cultureInfo.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy";
            cultureInfo.DateTimeFormat.LongDatePattern = "dd-MM-yyyy HH:mm:ss";
            cultureInfo.DateTimeFormat.DateSeparator = "-";
            cultureInfo.DateTimeFormat.TimeSeparator = ":";
            cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss";
            cultureInfo.DateTimeFormat.ShortTimePattern = "HH:mm";
            return CultureInfo.ReadOnly(cultureInfo);
        }
    }

在我的配置服务中我添加了以下代码:

CultureInfo.DefaultThreadCurrentCulture = Culture;
CultureInfo.DefaultThreadCurrentUICulture = Culture;
CultureInfo.CurrentCulture = Culture;
CultureInfo.CurrentUICulture = Culture;

在我的配置方法中,我添加了这些代码行:

 var options = new RequestLocalizationOptions
 {
     DefaultRequestCulture = new RequestCulture(Culture),
     SupportedCultures = new[] { Culture },
     SupportedUICultures = new[] { Culture }
 };

 app.UseRequestLocalization(options);
© www.soinside.com 2019 - 2024. All rights reserved.