FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

国际化时使用泰国语言,日期会变成泰国佛历日,日期格式不对

Open royxiaoyuan opened this issue 1 year ago • 7 comments

设置国际化语言为TH后,日期会变成泰国佛历日

   HClient.DefaultRequestHeaders.Add("Accept-Language", "th");

  var test= Fsql.Ado.Query<dynamic>($@"SELECT *
                              FROM EF_Sys_Line  where id='{Id}'");

数据库版本

Sql server 12.0.5850.14

安装的Nuget包

FreeSql.Provider.SqlServer 3.2.810

.net framework/. net core? 及具体版本

.Net 5.0

1706146683971

royxiaoyuan avatar Jan 25 '24 01:01 royxiaoyuan

微信圖片_20240125110145 Freesql是否会根据多语言设定自动转换日期?此记录在数据库的时间是中国时间,不知道请求头带上了th语言就会自动把日期类型转换成泰国佛教时间,这个如果取消

bao2314483 avatar Jan 25 '24 03:01 bao2314483

跨时区方案,建议统一存储 utc

fsql.Aop.AuditDataReader += (_, e) =>
{
    if (e.DataReader.GetFieldType(e.Index) == typeof(DateTime))
        e.Value = e.DataReader.GetDateTime(e.Index); //在这里转换
};

2881099 avatar Jan 25 '24 07:01 2881099

跨时区方案,建议统一存储 utc

fsql.Aop.AuditDataReader += (_, e) =>
{
    if (e.DataReader.GetFieldType(e.Index) == typeof(DateTime))
        e.Value = e.DataReader.GetDateTime(e.Index); //在这里转换
};

不太懂,我存儲到數據庫的日期是正確的,而且數據庫用的mssql datetime類型存儲不存在時區問題,只是瀏覽器設置了泰語,然後查詢出來的日期就變成了泰國佛教日期了(如果你對泰國文化有了解的話就懂我說的是什麼意思),所以我這邊訴求是如何關閉這個設置

bao2314483 avatar Jan 27 '24 12:01 bao2314483

浏览器设置,那要在前端显示的时候处理,我以为和 ORM 有关系,那请无视我上面的回复。

2881099 avatar Jan 27 '24 14:01 2881099

浏览器设置,那要在前端显示的时候处理,我以为和 ORM 有关系,那请无视我上面的回复。

問題背景是這樣子 1.表字段(CreatedTime)存在MSSQL數據庫值是2024-01-25 11:32:40.070 2.測試API請求頭設置了語言為TH(泰文),但是日期格式就變成了25/1/2567 11:32:40 微信圖片_20240130101440

從表面來看就是Freesql轉換的,我不明白API請求頭的參數為什麼影響到freesql的查詢結果,所以想請教下怎麼解決和了解下你這邊的語言國際化的機制

bao2314483 avatar Jan 30 '24 02:01 bao2314483

浏览器设置,那要在前端显示的时候处理,我以为和 ORM 有关系,那请无视我上面的回复。

查明原因了,與freesql沒有關係,是net datetime類型自身問題,它會根據多語言設置自動變化日期展示方式

bao2314483 avatar Jan 30 '24 02:01 bao2314483

@bao2314483 数据库中存储的日期数据,理论上你可以理解为一堆二进制 或是一个long型的数字, 在你需要显示时会格式化显示。
在C#中,只要你能确定对应的ticks是对的(一个datetime对应的时钟振动次数),可以手动处理格式化。 在VS中编辑时,许多值他在你查看时为了方便会帮你格式化,让你误以为转换出了问题。。 所以要对比原始值。

你这里的截图是VS里的,理论上不会有转换问题。。只有转成string再转换成datetime时才可能出问题

hjkl950217 avatar Jul 02 '24 02:07 hjkl950217