首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尽管在当前线程中设置了正确的语言环境,但在Linux Ubuntu18.04上C# DateTime.ToString()是错误的

尽管在当前线程中设置了正确的语言环境,但在Linux Ubuntu18.04上C# DateTime.ToString()是错误的
EN

Stack Overflow用户
提问于 2019-05-10 00:26:41
回答 4查看 1.3K关注 0票数 2

好吧,这快把我逼疯了。我安装了一个新的ubuntu18.04服务器实例,它运行我的dotnetcore2.2MVC应用程序。

尽管在操作系统和当前线程中似乎正确设置了语言环境,但DateTime.ToString()函数给了我一种奇怪的数据格式:

  • 格式错误: 19-05-09 12 12 21 21 02 2
  • 预期格式: 19-05-09 12:21:01

在这两种情况下,当前线程本地都是"fr-CA“。在操作系统中,"locale“命令在这两种情况下都会返回"en_US”。

我在CurrentThread.CurrentCulture.DateTimeFormat中检查过depper,它似乎在两种情况下都不一样。查看CurrentThread.CurrentCulture.DateTimeFormat.ShortTimePattern变量时:

  • 错误格式输出模式给我: HH h mm
  • 好格式服务器输出模式给我: HH:mm

这是什么魔法?我的鼻子在出血。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-10 01:59:25

在研究了dotnet核心中的DateTime格式的源代码之后,我找到了一个修复方法,可以确保ToString()在不带参数的情况下正常工作。

代码语言:javascript
复制
System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat.LongTimePattern = "HH:mm:ss";
System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";            
System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat.TimeSeparator = ":";

System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat = System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat;
票数 1
EN

Stack Overflow用户

发布于 2019-05-10 03:33:46

我可以复制您的结果,这似乎是.NET核心如何解释这种特定文化的CLDR数据的特定错误。

我在这里报告了这个问题:https://github.com/dotnet/corefx/issues/37557

票数 2
EN

Stack Overflow用户

发布于 2019-05-10 00:43:25

就像@Powerlord在评论中说的那样,你为什么不指定日期的格式呢?

如下所示:

代码语言:javascript
复制
DateTime.ToString("dd-MM-yy HH:mm:ss");

输出:

代码语言:javascript
复制
09-05-19 17:43:10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56063807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档