關於DateTimeOffset的愛恨情仇


為什么要上DataTimeOffset?因為DateTime無法解決時區問題,經常需要時間戳轉換日期,DateTimeOffset就是應運而生,數據格式儲存了和UTC的時區差,C#幾乎全幾乎全版本支持

https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset?view=netframework-2.0

https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetimeoffset-transact-sql?view=sql-server-2017

數據庫SQL 2008以上版本就支持了,沒道理不用,我就鼓動公司上了,實際使用時,實體對象到html的DataTable綁定的時候,顯示出了時區信息,作為體驗,確實不好

我就在ViewModel上面加了一行Format的特性,返回還是DateTimeOffset屬性

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}")]

public DateTimeOffset StartTime { get; set; }

這樣就行了,但是給input標簽展示的時候,這樣不行,被迫StartTime.ToString("yyyy/MM/dd HH:mm:ss")

 

本以為就大功告成了,今天小伙伴說,數據庫查詢的時候,無法找到查詢的指定日期

被迫無耐,自己挖的坑啊,自己填。

找到一個方法TODATETIMEOFFSET,這個方法可以解決,但是它兩個參數,第二個參數是時區信息

我們就這樣實現

                    var timeZone = DateTimeOffset.Now.ToString("zzz");

                    if (model.StartTime != null)
                    {
                        var startTime = model.StartTime.Value.ToString("yyyy/MM/dd HH:mm:ss");
                        timeStr += $"[CreatedTime]>=TODATETIMEOFFSET('{startTime}', '{timeZone}')";
                    }

大功告成~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM