2015-11-02 110 views
2

我創建了一個包含文本框的用戶窗體,該窗體將顯示EST中的當前時間。唯一的問題是,反映的時間當然是我們國家的當前時間,所以我想把它轉換成東部時間,這是我們這個時代的- 12:00顯示當前時間(EST)

Private Sub UserForm_Initialize() 
If ActiveWorkbook.MultiUserEditing Then 

End If 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
    txtDate.Value = Format(Now, "mm/dd/yyyy") 


Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
End Sub 
+0

您還可以添加預期的輸出和您實際看到的內容嗎? – stef

+0

*「which is - 12:00」* - 假設您的時區和東部時間都不會改變夏令時。你沒有說明你的時區,但是美國東部時間的確發生了變化,就像上個週末剛剛做的那樣。 –

+0

對不起,即將使用UTC + 08:00,所以我認爲現在應該是-13:00。 – user5500328

回答

2

您需要使用TimeValue功能如下:

txtDate.Value = Format(Now - TimeValue("12:00:00"), "mm/dd/yyyy") 
2

比R3uK一個更復雜的方式,但使用TimeSerial()DateSerial()讓我的確切標準設置(特別是當你需要我一直喜歡修改時間的多個部分)。

Sub TimeToEST() 

Dim ESTHour As Integer 
If Hour(Now) - 12 < 0 Then 
    ESTHour = 24 + Hour(Now) - 12 
Else 
    ESTHour = Hour(Now) - 12 
End If 

txtDate.Value = TimeSerial(ESTHour, Minute(Now), Second(Now)) 

End Sub 

要EST只顯示當前日期:

Sub DateToEST() 

Dim ESTDate As Date 
If Hour(Now) < 12 And Day(Now) = 1 Then 
    ESTDate = Now - TimeValue("12:00:00") 
ElseIf Hour(Now) < 12 Then 
    ESTDate = DateSerial(Year(Now), Month(Now), Day(Now) - 1) 
Else 
    ESTDate = DateSerial(Year(Now), Month(Now), Day(Now)) 
End If 

txtDate.Value = ESTDate 

End Sub 
+0

嗨聖誕節,如果我只想要日期顯示怎麼辦?不是時間 – user5500328

+0

@ user5500328已更新,但比R3uk的條目複雜得多。 – Chrismas007

+0

VBA運行的時間,但當我更改VBA時,顯示語法錯誤。它突出顯示了這部分VBA Else If Hour(Now)<12然後 – user5500328

0

它,如果你想在公式中使用它簡單得多。 使用NOW()函數,然後使用TIME函數減去差值。

例如,我處於比EST早9:30的時區。 因此,獲得EST時間,我將使用NOW()在當前日期時間中使用NOW(),然後使用以下公式從中減去9小時30分鐘。

= NOW() - TIME(9,30,0)

享受!

+0

這只是增加了一個固定偏移量,這對於轉換到不同的時區(由於夏令時)。你是否閱讀過這個問題的評論? –

+0

我的回答是原來的問題,即「我們的時間是12:00 - 即固定時間扣除」。通過更改TIME功能中的參數(每年兩次練習),必須處理DST更改。 – user6337701