powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование в дату.
28 сообщений из 28, показаны все 2 страниц
Преобразование в дату.
    #32717737
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть дата вида
"31 Jan 04 00:50:24"
как ее из VB или VBA преобразовать к виду
"31-01-2004 00:50:24"
?
Все получилось, НО часть строки "31 Jan 04" не получается преобразовать в "01-01-2004". Пробовал Cdate, format и т.д.
Уже клинит.....
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32717748
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
31-е января в 1-е преобразовать довольно сложно :)

Код: plaintext
1.
2.
3.
4.
5.
Private Sub Form_Load()
Dim a As Date
a = "31 Jan 04 00:50:24"

MsgBox Format$(a, "dd-mm-yyyy hh:mm:ss")
End Sub
Magnus
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718006
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы все так было просто!
Код: plaintext
1.
Dim aDate As Date
 aDate = "31 Jan 04  00:50:24"

На aDate = "31 Jan 04 00:50:24" ошибка Type mismatch (Error 13)

Если делать
Dim sDate As String
aDate = "31 Jan 04 00:50:24"
MsgBox Format$(aDate, "dd-m-yyyy hh:mm:ss")

то все равно дата остается "31 Jan 04 00:50:24"
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718600
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikeTech НО часть строки "31 Jan 04" не получается преобразовать в "01-01-2004"...

так не будет
ты хочешь превратиь 31 января в 1 января! волшебник что-ли?
а так все через format идет
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718747
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
\'не очень красиво, зато работаетPrivate Sub Form_Load()    Dim sDate As String    sDate = "31 Jan 04 00:50:24"    Dim aMon() As String    Dim oldMon As String    Dim newMon As String    \'функция Split есть только в VB6,    \'в VBA и VB5 - задавайте массив другим способом    aMon() = Split(",Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", ",")    oldMon = Mid$(sDate, 4, 3)    For i = 1 To 12        If oldMon = aMon(i) Then            newMon = IIf(i < 10, "0" & i, i)            Exit For        End If    Next    sDate = Left(sDate, 3) & newMon & Right(sDate, 12)    MsgBox sDateEnd Sub
Как отформатирован этот код?
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718837
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Нужно мутить с локальными установками машины.

2 MikeTech
Какой у тебя формат, в Regional settings?
Версия васика? SP?

btw, код я постил из окна vb.





Magnus
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718857
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Magnus23Мда. Нужно мутить с локальными установками машины.

2 MikeTech
Какой у тебя формат, в Regional settings?
Версия васика? SP?

btw, код я постил из окна vb.





Magnus

Time
H:mm:ss
Date
dd.MM.yyyy
long
d MMMM yyyy 'г.'

пишу в vba под word, W2000P SP4
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718860
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Magnus23
это конечно не красиво - использовать предопределённый масив названий месяцев, но на время работы программы - менять менять локальные установки - ещё хуже.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718885
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvan2 Magnus23
это конечно не красиво - использовать предопределённый масив названий месяцев, но на время работы программы - менять менять локальные установки - ещё хуже.
Не менять а читать и работать исходя из текущих.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32718912
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MikeTech
Весьма странно. Только что установил твой формат, запустил тот же код в макросе VBA, результат одинаков. Код отработал без проблем. Причем пробовал штук 5 разных форматов, все ок.
Не знаю играет ли какую-то роль версия ворда, в vba я не специалист.
Офис русский?



Может еще кто попробует?

Magnus
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32719559
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvanSplit есть только в VB6, в VBA и VB5 - задавайте массив другим способом
В Office 2000/XP VBA есть подмножество VB6 (см. About...).
Поэтому функция Split доступна:
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32719874
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Magnus23Весьма странно. Только что установил твой формат, запустил тот же код в макросе VBA, результат одинаков. Код отработал без проблем. Причем пробовал штук 5 разных форматов, все ок.
Не знаю играет ли какую-то роль версия ворда, в vba я не специалист.
Может еще кто попробует?
Попробовал.
Regional Settings: Russia
И в Office 2000, и в OfficeXP SP3 (MUI) выдаёт Type mismatch.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720303
bazaea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия Magnus23
Код: plaintext
1.
Dim aDate As Date
 aDate = "31 Jan 04  00:50:24"
жизнеспособна только при проанглийских региональных настройках. Jan это вам не Янв
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720368
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Magnus232 MikeTech
Весьма странно. Только что установил твой формат, запустил тот же код в макросе VBA, результат одинаков. Код отработал без проблем. Причем пробовал штук 5 разных форматов, все ок.
Не знаю играет ли какую-то роль версия ворда, в vba я не специалист.
Офис русский?



Может еще кто попробует?

Magnus

Русский.
W2000 (9.0.3821 SR-1)
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720415
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен. Но есть еще одна странность. У меня настройки португальские, т.е. длинная дата выглядит так "31 de Jan de 04 00:50:24"

Но тем не менее схавала.

Думаю в этом случае проще делать Replace месяца в соответствиии с региональными установками и далее обычным образом.

Magnus
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720470
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Magnus23Думаю в этом случае проще делать Replace месяца в соответствиии с региональными установками и далее обычным образом.
А если дата вида "31 Jan 04 00:50:24" - получена исходно в виде строки? Например из БД или текстового файла? А это скорее всего так и есть. При чём здесь региональные установки? Очень может быть, что названия месяцев в приведённом мной массиве - не совпадают с остальными месяцами (у меня для английского, а может это норвежский). Но как по дате определить при каких региональных установках она была сформирована и самое главное - зачем это делать?
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720504
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мучиться, сделай в лоб. Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Public Function DateToString(ByVal MyDate As Date) As String
    Dim rv As String
    Dim tmp As Long
    Dim yyyy, mm, dd, hh, mi, ss, mls As String
    yyyy = CStr(Year(MyDate))
    mm = ""  ' ----++ 
    tmp = Month(MyDate)
    If tmp <  10  Then mm = mm + "0"
    mm = mm + CStr(tmp)
    dd = ""  ' ----++ 
    tmp = Day(MyDate)
    If tmp <  10  Then dd = dd + "0"
    dd = dd + CStr(tmp)
    hh = ""  ' ----++ 
    tmp = Hour(MyDate)
    If tmp <  10  Then hh = hh + "0"
    hh = hh + CStr(tmp)
    mi = ""  ' ----++ 
    tmp = Minute(MyDate)
    If tmp <  10  Then mi = mi + "0"
    mi = mi + CStr(tmp)
    ss = ""  ' ----++ 
    tmp = Seconds(MyDate)
    If tmp <  10  Then ss = ss + "0"
    ss = ss + CStr(tmp)
    mls = "000"
    rv = yyyy + "-" + mm + "-" + dd + " " + hh + ":" + mi + ":" + ss + "." + mls
    DateToString = rv
End Function

это я для себя так делал работает вроде не жалуюсь.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720511
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если дата вида "31 Jan 04 00:50:24" - получена исходно в виде строки?
Я имел ввиду, в зависимости от региональных установок делать замену месяца.
Т.е. если русский то заменять на русский.
Пару enum'ов прописать проблемы не составляет думаю.

В любом случае, все варианты предусмотреть не получиться. Ты же не переводишь свой софт на все языки мира?

Если есть конкретная проблема в поддержке русских и английски длинных дат(которые наиболее распространены), то такой ваиант не так уж плох.

Magnus
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720544
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае вряд ли получится такую задачу решить, придется писать парсер строк/конвертер. Вообще проблема преобразования даты из строки -"веселая" проблема. Особенно если эту дату вводила какая нибудь древняя программа и сохраняла ее в текстовом файле. Особенно если она еще и не автоматически формировалась, а заполнялась пользователем.

По существу,
Могу предложить еще передать ее на сервер БД и конвертировать там. Хотя это противоречит постановке задачи "средствами VB или VBA", может создать лишний round-trip, но вдруг кому-то поможет. Например, для MSSQL
MSSQLSELECT CONVERT(datetime,'31 Jan 04 00:50:24')
------------------------------------------------------
2004-01-31 00:50:24.000

(1 row(s) affected)
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720567
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне понравилась идея конвертить дату на SQL Servere. Это наверное был прикол такой :) / Мне это напоминает как в одном фильме зубы лечили через жопу :) Сорри если кто обиделся. :)
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720587
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegaDimonМне понравилась идея конвертить дату на SQL Servere. Это наверное был прикол такой :) / Мне это напоминает как в одном фильме зубы лечили через жопу :) Сорри если кто обиделся. :) А это смотря какая задача стоит. Если это задача импорта старых данных в новую базу (довольно частая задача), то конвертация их на сервере - вполне приемлемый вариант, т.к. данные все равно надо записать в базу.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32720607
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен, если паботает с БД то я двумя руками за такой метод, но если человеку нужно всего лишь конвертировать данные из строки ввода, то нужен другой способ.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32722972
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача стоит в преобразовании из текстового файла в Access, соответственно там есть поле с датой. в файле дата в формате "31 Jan 04 00:50:24" и т.д. Судя по топикав из других форумов нужно инсертить в формате YYYYDDMM hhmiss.

Вот такая вот задачка.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32723305
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так задача вроде решена? -приведённый мной пример чем не устраивает?
Код: plaintext
1.
Private Sub Form_Load()    MsgBox dConvert("31 Jan 04 00:50:24")End Sub\'функция преобразования строки в датуPrivate Function dConvert(sDate As String) As Date    Dim aMon As Variant    Dim oldMon As String    aMon = Array("", "Jan", "Feb", "Mar", "Apr", "May", "Jun", _                 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")    oldMon = Mid$(sDate, 4, 3)    For i = 1 To 12        If oldMon = aMon(i) Then            dConvert = CDate(Left$(sDate, 3) & _                             IIf(i < 10, "0" & i, i) & _                             Right$(sDate, 12))            Exit Function        End If    NextEnd Function
Как отформатирован этот код?
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32723504
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, проблема преобразования решена по предложенному marvan методу.
Остается проблема работы функции format
Так как имеем на входе
Код: plaintext
Msg.Dat="19  01 04  02:57:24"
после
Код: plaintext
Msg.Dat = "#" & Format(Msg.Dat, "mm/dd/yy hh:mm:ss") & "#"
получаем
"#01.19.04 02:57:24#"
Хотя должно быть не так.
Пишется в word200 vba w200 sp4

После
Код: plaintext
Msg.Dat = Replace(Msg.Dat, ".", "/")
и попытки залить в Access получаем ошибку.
Пример кода ниже, ошибка происходит на строке rst!Dat = Msg.Dat
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
prov = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FBase.Text & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"
cn.Open prov
Dim rst As New ADODB.Recordset
Set rst = New ADODB.Recordset
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Open "fido", cn, , , adCmdTable
 '..... 
 rst.AddNew
 rst!From_Name = Msg.From_Name
 rst!To_Name = Msg.To_Name
 rst!From_add = Msg.From_add
 rst!To_add = Msg.To_add
 rst!Area = Msg.Area
 rst!Sabj = Msg.Sabj
  'rst!Dat = "#" & Format(Msg.Dat, "mm/dd/yy hh:mm:ss") & "#" 
 rst!Dat = Msg.Dat
 rst!MsgId = Msg.MsgId
 rst!RepID = Msg.RepID
 rst!Kludge = Msg.Kludge
 rst!Msg.AppendChunk Msg.MSGText
 rst!seen_by = Msg.SeenBy
 rst!Path = Msg.Path
 rst.Update

Испльзовал faq http://www.sql.ru/faq/faq_topic.aspx?fid=157
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32723713
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мда.
это зачем?
Msg.Dat = "#" & Format(Msg.Dat, "mm/dd/yy hh:mm:ss") & "#"
если правильно понял, то поле rst!Dat имеет тип данных "Дата/время"
моя функция dConvert тоже возвращает тип данных "Дата/время"
так что это прекрасно работает:
Код: plaintext
rst!Dat = dConvert("31 Jan 04 00:50:24")
ну или так:
Код: plaintext
1.
2.
3.
 'Msg.Dat должен иметь тип данных Date 
Msg.Dat = dConvert("31 Jan 04 00:50:24")
...
rst!Dat = Msg.Dat
а на счёт нужно инсертить в формате YYYYDDMM hhmiss - чуш и бред
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32725846
MikeTech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, проблема решена.
Thanx всем.
...
Рейтинг: 0 / 0
Преобразование в дату.
    #32726996
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не в укор, но хорошим тоном считается опубликовать найденное решение, т.к. это в будущем поможет другим справится с подобной проблемой.
Вполне пможет такое случиться что и сам как нибудь еще будешь искать свой топик :).

Magnus
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование в дату.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]