当我使用EntityFrameworkCore从数据库中获取dateTimeOffset列的值时,当 CurrentCulture 和 CurrentUICulture 时,我在 Hijri 中获得了该列的值当前线程的>是阿拉伯语(ar-SA)。
我知道,如果在返回该值之前更改CurrentThread的CurrentCulture,则会在公历中得到它。
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-UK");
但是如何在不更改CurrentThread的CurrentCulture的情况下,将其作为公历中的dateTimeOffset返回?
答案 0 :(得分:1)
您关于当前文化影响EF核心如何创建DateTimeOffset
实例的主张是错误的。 DateTimeOffset
和DateTime
数据类型本身没有日历,并且线程的当前区域性不影响它们的创建方式(除非从字符串中进行解析)。
但是,除非另外指定,否则某些实例方法(例如ToString
)在被调用时将使用当前区域性。您可能会看到ToString
创建的字符串输出(无论是显式还是隐式的),并看到线程的当前区域性影响那里的输出。
因此,只需将特定的区域性(通常为InvariantCulture
)传递给ToString
方法,您将在公历中看到输出。
string myString = myDateTimeOffset.ToString(CultureInfo.InvariantCulture);
答案 1 :(得分:0)
在管道的第一个中间件中,我添加了以下代码:
orderqty
现在日期返回到公历而不是回历。
否则,我认为我应该隐式转换日期,而不要依赖当前线程的CurrentCulture。
答案 2 :(得分:-1)
您可以对接受IFormatProvider参数的DateTimeOffset对象的ToString()函数使用重载之一。这样,您可以在不更改CurrentCulture的情况下以指定的区域性显示对象。
CultureInfo culture = new CultureInfo("en-UK");
string representationUK = yourDateTimeOffset.ToString(culture);
您应该能够在Microsoft Documentation页面上找到更多信息