Про языки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Про языки

Сообщение Ramzes » 07.10.2004 (Чт) 14:13

Как получить значение текущего языка (Rus\eng)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.10.2004 (Чт) 14:23

вот классик посмотри, там есть то, что тебе поможет
Вложения
RegionalSettings.rar
(2.25 Кб) Скачиваний: 22

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 07.10.2004 (Чт) 14:24

здесь смотри функцию getCurrLang

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

Сообщение tyomitch » 07.10.2004 (Чт) 19:55

Konst_One писал(а):вот классик посмотри, там есть то, что тебе поможет
Неа, нету там этого :-(
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 08.10.2004 (Пт) 12:38

Ну и я прилеплюсь тогда к этому вопросу (чтобы темы не плодить). :)
Как узнать какой сейчас период: летний или зимний?
Т.е. перешли уже на зимнее время или на летнее? Нужно для определения смещения времени по часовым поясам. :)
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

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

Сообщение tyomitch » 08.10.2004 (Пт) 16:10

Ruslan Demidow писал(а):Ну и я прилеплюсь тогда к этому вопросу (чтобы темы не плодить). :)
Как узнать какой сейчас период: летний или зимний?
Т.е. перешли уже на зимнее время или на летнее? Нужно для определения смещения времени по часовым поясам. :)

Код: Выделить всё
Option Explicit

Private Declare Function GetTimeZoneInformation Lib "kernel32" (ByVal lpTimeZoneInformation As Long) As Long
Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
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 Type TIME_ZONE_INFORMATION
    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

Sub Main()
Dim tz As TIME_ZONE_INFORMATION, now As SYSTEMTIME, utc As SYSTEMTIME
GetTimeZoneInformation (VarPtr(tz))
GetLocalTime now
GetSystemTime utc
If (utc.wHour - now.wHour) * 60 + (utc.wMinute - now.wMinute) = tz.Bias + tz.StandardBias Then
    Debug.Print tz.StandardName
ElseIf (utc.wHour - now.wHour) * 60 + (utc.wMinute - now.wMinute) = tz.Bias + tz.DaylightBias Then
    Debug.Print tz.DaylightName
Else
    Debug.Print "Unknown time!"
End If
End Sub
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 08.10.2004 (Пт) 21:59

Артём, спасибо.
Возник один вопрос: tz.DaylightName возращает строку "Московское время (зима)". Как мне определять это время на системах с разным языком? Перебирать все возможные значения?
И ещё, почему зима? Ведь, если я не проспал, пока ещё летнее время...
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

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

Сообщение tyomitch » 08.10.2004 (Пт) 23:11

Ruslan Demidow писал(а):Артём, спасибо.
Возник один вопрос: tz.DaylightName возращает строку "Московское время (зима)". Как мне определять это время на системах с разным языком? Перебирать все возможные значения?
И ещё, почему зима? Ведь, если я не проспал, пока ещё летнее время...

2. Потому что DaylightName - это название зимнего времени, а StandardName - летнего. Это нигде не используется и задействовано в примере только для демонстрации :-)

1. Ты таки не понял :-)
Комментирую:
а) мы получаем местное время в now, а универсальное - в utc;
б) считаем между ними разницу в минутах;
в) если эта разница совпадает с летней (tz.Bias + tz.StandardBias) - пишем, что время летнее, а если с зимней (tz.Bias + tz.DaylightBias) - что зимнее.

Если тебе просто нужно знать смещение местного времени относительно универсального, то это (utc.wHour - now.wHour) * 60 + (utc.wMinute - now.wMinute)
При этом даже не нужно проверять, летнее сейчас время или зимнее.

Там, кстати, баг, который проявляется, если в Гринвиче ещё вчера, а тут уже сегодня. Вот исправленный код:
Код: Выделить всё
Option Explicit
Private Declare Function GetTimeZoneInformation Lib "kernel32" (ByVal lpTimeZoneInformation As Long) As Long
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Public Declare Function SystemTimeToVariantTime Lib "oleaut32" (lpSystemTime As SYSTEMTIME, pvTime As Date) As Long
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 Type TIME_ZONE_INFORMATION
    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

Sub Main()
Dim tz As TIME_ZONE_INFORMATION, utc As SYSTEMTIME, dUTC As Date, diff As Integer
GetTimeZoneInformation (VarPtr(tz))
GetSystemTime utc
SystemTimeToVariantTime utc, dUTC
diff = (dUTC - Now) * 24 * 60
If diff = tz.Bias + tz.StandardBias Then
    Debug.Print tz.StandardName
ElseIf diff = tz.Bias + tz.DaylightBias Then
    Debug.Print tz.DaylightName
Else
    Debug.Print "Unknown time!"
End If
End Sub
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.10.2004 (Сб) 10:45

Ага, понял.
Спасибо за пояснение. :)
Это Ж-ж-ж-ж неспроста (с) Винни-Пух


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

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

Сейчас этот форум просматривают: AhrefsBot, PetalBot и гости: 1

    TopList  
cron