2015-11-02 139 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