FreeSql
FreeSql copied to clipboard
国际化时使用泰国语言,日期会变成泰国佛历日,日期格式不对
设置国际化语言为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
Freesql是否会根据多语言设定自动转换日期?此记录在数据库的时间是中国时间,不知道请求头带上了th语言就会自动把日期类型转换成泰国佛教时间,这个如果取消
跨时区方案,建议统一存储 utc
fsql.Aop.AuditDataReader += (_, e) =>
{
if (e.DataReader.GetFieldType(e.Index) == typeof(DateTime))
e.Value = e.DataReader.GetDateTime(e.Index); //在这里转换
};
跨时区方案,建议统一存储 utc
fsql.Aop.AuditDataReader += (_, e) => { if (e.DataReader.GetFieldType(e.Index) == typeof(DateTime)) e.Value = e.DataReader.GetDateTime(e.Index); //在这里转换 };
不太懂,我存儲到數據庫的日期是正確的,而且數據庫用的mssql datetime類型存儲不存在時區問題,只是瀏覽器設置了泰語,然後查詢出來的日期就變成了泰國佛教日期了(如果你對泰國文化有了解的話就懂我說的是什麼意思),所以我這邊訴求是如何關閉這個設置
浏览器设置,那要在前端显示的时候处理,我以为和 ORM 有关系,那请无视我上面的回复。
浏览器设置,那要在前端显示的时候处理,我以为和 ORM 有关系,那请无视我上面的回复。
問題背景是這樣子
1.表字段(CreatedTime)存在MSSQL數據庫值是2024-01-25 11:32:40.070
2.測試API請求頭設置了語言為TH(泰文),但是日期格式就變成了25/1/2567 11:32:40
從表面來看就是Freesql轉換的,我不明白API請求頭的參數為什麼影響到freesql的查詢結果,所以想請教下怎麼解決和了解下你這邊的語言國際化的機制
浏览器设置,那要在前端显示的时候处理,我以为和 ORM 有关系,那请无视我上面的回复。
查明原因了,與freesql沒有關係,是net datetime類型自身問題,它會根據多語言設置自動變化日期展示方式
@bao2314483 数据库中存储的日期数据,理论上你可以理解为一堆二进制 或是一个long型的数字, 在你需要显示时会格式化显示。
在C#中,只要你能确定对应的ticks是对的(一个datetime对应的时钟振动次数),可以手动处理格式化。
在VS中编辑时,许多值他在你查看时为了方便会帮你格式化,让你误以为转换出了问题。。 所以要对比原始值。
你这里的截图是VS里的,理论上不会有转换问题。。只有转成string再转换成datetime时才可能出问题