Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2012, 00:59   #1
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию Проблема со стандартом формата даты

Столкнулся с проблемой. У клиента какая то программа изменила
региональный стандарт для краткого формата даты.
Было dd.MM.yyyy стало dd-MMM-yyyy
В результате в VBA коде функция CDate(s) при s="15.01.2012" стала
создавать ошибку преобразования типа
Есть ли идеи как защититься от подобных ситуаций кроме как:
1) Парсить s и использовать DateSerial
2) Преобразовывать s к формату "yyyy-MM-dd" (который VBA понимает вроде бы всегда независимо от локали)
3) Изменять параметр sShortDate ключа реестра
HKEY_CURRENT_USER\Control Panel\International
или сформировать системную политику
4) Делать как написано здесь: http://vbnet.mvps.org/index.html?cod...localeinfo.htm

Я пока склонился к варианту 1)
Aent вне форума Ответить с цитированием
Старый 17.01.2012, 11:36   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

с помощью RegExp можно строки типа дд-мм-гггг, дд.мм.гггг, дд/мм/гггг и подобные привести к принятому в системе виду записи дат.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 17.01.2012 в 11:39.
IgorGO вне форума Ответить с цитированием
Старый 17.01.2012, 15:12   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Боюсь, что в общем случае использовать RegExp будет несколько нетривиально.
Игорь, вы обратили внимание какой формат даты оказался у меня установлен?
Т.е мне надо бы было преобразовать 15.01.2012 в 15-янв-2012 ...
Тогда уж лучше получить формат даты и просто воспользоваться Format$(...).....
Aent вне форума Ответить с цитированием
Старый 18.01.2012, 00:49   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Я использую так

Код:
Sub test()
g = DataSql2("12-янв-2010")
End Sub
Function DataSql2(dt_sql) As Date
DataSql2 = CDate(Format(dt_sql, "mm\/dd\/yy hh\:mm\:ss"))
End Function
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка формата даты в VBA Polly-as Microsoft Office Excel 3 14.05.2011 10:12
проблема с изменением формата даты при копировании из CSV формата в эксель mars56 Microsoft Office Excel 4 16.03.2010 09:50
преобразовать два формата даты в один olimpus Microsoft Office Excel 2 18.09.2008 09:16
Office Open XML признали международным стандартом merax Свободное общение 2 03.04.2008 16:11
Установка формата даты для TDateEdit SAP Компоненты Delphi 3 20.03.2007 18:46