之前作的 MaskQueen專案 以及現在 UNT的TR獨立專案
都牽涉到後台使用者及前台User看訂單時間錯誤問題
因為系統時間是TW的時間而操作者是外國的使用者 這就需要有個方便模組來轉換系統時間以及user的時間顯示
這部分我以 Extension Method 方式來處理
in VB
Imports System.Runtime.CompilerServices
Imports Microsoft.VisualBasic
Public Module DateTimeExtension
''' <summary>
''' 將系統時間轉為當地的時間並轉為字串
''' </summary>
''' <param name="dtSystem"></param>
''' <returns></returns>
''' <remarks></remarks>
<Extension()> _
Public Function ToCountryDateTimeString(ByVal dtSystem As DateTime) As String
If dtSystem = DateTime.MinValue Then
Return "n/a"
End If
Dim cstTime As DateTime = dtSystem.ToCountryDateTime()
' tr-TR -> dd.MM.yyyy HH:mm:ss
Dim langCode As String = SHOPUNT.DB.SysConfig.GetSysConfig("DefaultLangCode")
Dim culture As New System.Globalization.CultureInfo(langCode)
If cstTime.AddMonths(6) < Now Then
Return cstTime.ToString("dd.MM.yyyy HH:mm", culture)
Else
Return cstTime.ToString("dd.MMM HH:mm", culture)
End If
End Function
''' <summary>
''' 將系統時間轉為當地的時間
''' </summary>
''' <param name="dtSystem"></param>
''' <returns></returns>
''' <remarks></remarks>
<Extension()> _
Public Function ToCountryDateTime(ByVal dtSystem As DateTime) As DateTime
Dim cstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(SHOPUNT.DB.SysConfig.GetSysConfig("DefaultTimeZone"))
Dim localZone As TimeZoneInfo = TimeZoneInfo.Local
Dim cstTime As DateTime = TimeZoneInfo.ConvertTime(dtSystem, localZone, cstZone)
Return cstTime
End Function
''' <summary>
''' 將使用者輸入的時間轉為系統時間
''' </summary>
''' <param name="dtCountry"></param>
''' <returns></returns>
''' <remarks></remarks>
<Extension()> _
Public Function ToSystemDateTime(ByVal dtCountry As DateTime) As DateTime
Dim cstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(SHOPUNT.DB.SysConfig.GetSysConfig("DefaultTimeZone"))
Dim localZone As TimeZoneInfo = TimeZoneInfo.Local
Dim sysTime As DateTime = TimeZoneInfo.ConvertTime(dtCountry, cstZone, localZone)
Return sysTime
End Function
End Module
使用上 只要
DateTime.Now.ToCountryDateTime() 就可以把系統時間轉換成user時間
相反的也有把 user時間轉換成系統時間的功能 ToSystemDateTime()
英國的TimeZone: GMT Stanard Time
Turkey的TimeZone: Turkey Stanard Time
以上的值可以用 TimeZoneInfo.GetSystemTimeZones() 找出來