Какой-то хирый косяк с региональными настройками

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

Какой-то хирый косяк с региональными настройками

Сообщение Pantalone » 02.07.2009 (Чт) 18:09

Есть такой параметр как Short Date Format Ordering, его можно получить через апишную функцию GetLocaleInfoA.
В гугле я выяснил что значения для этого параметра могут возвращаться следующие: 0, 1, 2.
Они зависят от региональных настроек даты, а именно от Short date format следующим образом:
0 если этот формат указан в такой последовательности: Month - Day - Year
1 Day - Month - Year
2 Year - Month - Day

На машине заграничного клиента по какой-то неведомой причине этот параметр выдается как 0 и при этом Short date format у него dd/MM/yyyy, т.е. по правилу подходит Day - Month - Year и по запросу Short Date Format Ordering должно выдаваться 1.

В результате такого косяка у него моя прога не может нормально форматировать даты, например дата 02/07/2009 у него форматируется в 07/02/2009.

Кто-нибудь подскажите от чего еще зависит параметр Short Date Format Ordering?

Я поставил на стендовом компе регионаьные настройки идентичные скриншотам какие он прислал и у меня Short Date Format Ordering равен 1 что и должно быть у него, а у него 0.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Какой-то хирый косяк с региональными настройками

Сообщение JohnK » 02.07.2009 (Чт) 20:46

Вуаля:
Код: Выделить всё
Private Const LOCALE_SSHORTDATE As Long = &H1F

Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long

Private Function GetShortDateFormat() As String
Dim strFormat As String
Dim lcid As Long
Dim BufLen As Long
Dim retBuf As String

GetShortDateFormat = ""

  lcid = GetSystemDefaultLCID()
  BufLen = GetLocaleInfo(lcid, LOCALE_SSHORTDATE, 0&, 0&)
  If (BufLen) Then
   retBuf = Space$(BufLen - 1)
   Call GetLocaleInfo(lcid, LOCALE_SSHORTDATE, retBuf, BufLen)
  End If
If Len(retBuf) > 0 Then GetShortDateFormat = retBuf
End Function
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

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

Re: Какой-то хирый косяк с региональными настройками

Сообщение alibek » 02.07.2009 (Чт) 21:21

Почему бы просто не получать строку формата и не форматировать по ней?
Lasciate ogni speranza, voi ch'entrate.


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Mail.ru [бот] и гости: 88

    TopList