向Asp.net Ajax 傳入DateTime類型後時間會變為零時區的時間,換句話說也就是比中國的時間少了8個小時。
例如:
自訂類型MyOrder
關於在Asp.net Ajax裡面使用自訂類型請參考
使用ASP.NET AJAX非同步呼叫Web Service和頁面中的類方法(6):伺服器端和用戶端資料類型的自動轉換:複雜類型
C#
public class MyOrder()
{
public MyOrder()
{
}
private DateTime _OrderDateTime;
public DateTime OrderDateTime
{
get
{
return _OrderDateTime;
}
set
{
_OrderDateTime=value;
}
}
…………其他略
}
JS
function()
{
var order=new MyOrder();
MyOrder.OrderDateTime=new Date();
…………其他略
}
然後在WebService裡面查看,傳入後OrderDateTime少了8個小時。
如果直接以DateTime參數傳入Sql寫入資料庫就變回了正常的時間。
最後發現是時區的問題。
解決方案是調用DateTime的ToLocalTime()方法。如果本機電腦時區設定正確,那麼返回回來的時區也是正確的。
也查詢過一些資料,也可以直接加上8個小時,不過傳入的時間是帶時區資訊的。用ToLocalTime()好像更好些。另外我試著設定web.config將<globalization culture="zh-CN" enableClientBasedCulture="false"/>但並不起作用。
關於ToLocalTime
將當前 DateTime 對象的值轉換為本地時間。
命名空間:System
程式集:mscorlib(在 mscorlib.dll 中)
文法
C# |
public DateTime ToLocalTime () |
傳回值
一個 DateTime 對象,其 Kind 屬性為,並且其值為等效於當前 DateTime 對象的值的本地時間;如果經轉換的值過大以至於不能由 DateTime 對象表示,則為 MaxValue,或者,如果經轉換的值過小以至於不能表示為 DateTime 對象,則為 MinValue。 備忘
本地時間等於 UTC 時間加上 UTC 位移量。有關 UTC 位移量的更多資訊,請參見 TimeZone.GetUtcOffset。轉換還要考慮應用於當前 DateTime 對象所表示的時間的夏時制規則。
從 .NET Framework 2.0 版開始,ToLocalTime 方法返回的值由當前 DateTime 對象的 Kind 屬性確定。下表說明了可能的值。
Kind |
結果 |
|
DateTime 的此執行個體被轉換為本地時間。 |
Local |
未執行任何轉換。 |
|
假定 DateTime 的此執行個體為 UTC 時間,並且執行轉換時將 Kind 視作 Utc。 |
該轉換返回的值為 Kind 屬性總是返回 Local 的 DateTime。因此,即使 ToLocalTime 反覆應用於同一個 DateTime,返回的仍然是有效結果。
此方法在進行計算時總是使用本地時區。