Время по гринвичу

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Время по гринвичу

Сообщение dedmakar » 04.07.2007 (Ср) 15:20

Как запросить у компа время по гринвечу?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.07.2007 (Ср) 15:30

TzSpecificLocalTimeToSystemTime
Lasciate ogni speranza, voi ch'entrate.

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 04.07.2007 (Ср) 15:43

alibek,
можете продемонстрировать, что бы при нажатие на Button на Text1 появилось время. А то у меня не получается. Спасибо

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.07.2007 (Ср) 15:53

dedmakar, предлагаю сделать это самостоятельно, используя такой код для примера:
Код: Выделить всё
Private Type SystemTime
  wYear As Integer
  wMonth As Integer
  wWeekday As Integer
  wDay As Integer
  wHour As Integer
  wMinute As Integer
  wSecond As Integer
  wMilliseconds As Integer
End Type
Private Type TimeZoneInformation
  Bias As Long
  StandardName As String * 32
  StandardDate As SystemTime
  StandardBias As Long
  DaylightName As String * 32
  DaylightDate As SystemTime
  DaylightBias As Long
End Type
Private Declare Function apiGetTimeZoneInformation Lib "kernel32" Alias "GetTimeZoneInformation" (ByRef lpTimeZone As Any) As Long
Private Declare Function apiSystemTimeToTzSpecificLocalTime Lib "kernel32" Alias "SystemTimeToTzSpecificLocalTime" (ByRef lpTimeZone As Any, ByRef lpUTCTime As Any, ByRef lpLocalTime As Any) As Long
Private Declare Function apiTzSpecificLocalTimeToSystemTime Lib "kernel32" Alias "TzSpecificLocalTimeToSystemTime" (ByRef lpTimeZone As Any, ByRef lpLocalTime As Any, ByRef lpUTCTime As Any) As Long

Public Function GetTimeZoneInfo(Optional ByRef ZoneDelta As Long, Optional ByRef ZoneName As String, Optional ByRef ZoneCode As String) As Long
Dim Z As TimeZoneInformation, ret As Long
ret = apiGetTimeZoneInformation(Z)
If ret = (-1&) Then Exit Function
ZoneDelta = Z.Bias
ZoneName = StrConv(Z.StandardName, vbFromUnicode)
Select Case ZoneDelta
  Case 0
    ZoneCode = "GMT"
  Case Is < 0
    ZoneCode = "GMT+" & Format$(Abs(ZoneDelta) \ 60, "00") & Format$(Abs(ZoneDelta) Mod 60, "00")
  Case Is > 0
    ZoneCode = "GMT-" & Format$(Abs(ZoneDelta) \ 60, "00") & Format$(Abs(ZoneDelta) Mod 60, "00")
End Select
GetTimeZoneInfo = -ZoneDelta
End Function

Public Function TimeLocal2UTC(ByVal LocalTime As Date) As Date
Dim Z As TimeZoneInformation, U As SystemTime, L As SystemTime, ret As Long

'TzSpecificLocalTimeToSystemTime unavailable on Windows 2000
'Start patch
ret = apiGetTimeZoneInformation(Z)
If ret = (-1&) Then TimeLocal2UTC = LocalTime: Exit Function
TimeLocal2UTC = DateAdd("n", Z.Bias, LocalTime)
Exit Function
'End patch

With L
  .wYear = Year(LocalTime)
  .wMonth = Month(LocalTime)
  .wDay = Day(LocalTime)
  .wWeekday = Weekday(LocalTime) - 1
  .wHour = Hour(LocalTime)
  .wMinute = Minute(LocalTime)
  .wSecond = Second(LocalTime)
  .wMilliseconds = 0
End With
ret = apiTzSpecificLocalTimeToSystemTime(ByVal 0&, L, U)
If ret = 0& Then TimeLocal2UTC = LocalTime: Exit Function
TimeLocal2UTC = DateSerial(U.wYear, U.wMonth, U.wDay) + TimeSerial(U.wHour, U.wMinute, U.wSecond)
End Function

Public Function TimeUTC2Local(ByVal UTCTime As Date) As Date
Dim Z As TimeZoneInformation, U As SystemTime, L As SystemTime, ret As Long
With U
  .wYear = Year(UTCTime)
  .wMonth = Month(UTCTime)
  .wDay = Day(UTCTime)
  .wWeekday = Weekday(UTCTime) - 1
  .wHour = Hour(UTCTime)
  .wMinute = Minute(UTCTime)
  .wSecond = Second(UTCTime)
  .wMilliseconds = 0
End With
ret = apiSystemTimeToTzSpecificLocalTime(ByVal 0&, U, L)
If ret = 0& Then TimeUTC2Local = UTCTime: Exit Function
TimeUTC2Local = DateSerial(L.wYear, L.wMonth, L.wDay) + TimeSerial(L.wHour, L.wMinute, L.wSecond)
End Function
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.07.2007 (Ср) 15:53

Текущее время можно получить просто по GetSystemTime.
Изображение

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 04.07.2007 (Ср) 19:52

tyomitch,
использую GetSystemTime. Он мне выводит не правельные часы. Показывают на час меньше от гринвича.
КОД:
Код: Выделить всё
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type
Private Sub Form_Load()
    Dim SysTime As SYSTEMTIME
    Me.AutoRedraw = True
    GetSystemTime SysTime
    Me.Print "The System Date is:" & SysTime.wMonth & "-" & SysTime.wDay & "-" & SysTime.wYear
    Me.Print "The System Time is:" & SysTime.wHour & ":" & SysTime.wMinute & ":" & SysTime.wSecond
End Sub

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.07.2007 (Ср) 23:34

dedmakar, правильный ли часовой пояс выставлен в системе?

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 05.07.2007 (Чт) 2:51

переход на летнее время не учитывает

dedmakar
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 08.02.2007 (Чт) 21:16

Сообщение dedmakar » 05.07.2007 (Чт) 12:43

Amed,
эту прогу я скинул 5 юзерам. У всех одно и то же.
NashRus,
ты наверно прав)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 101

    TopList