Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование в дату. / 25 сообщений из 28, страница 1 из 2
29.09.2004, 20:41
    #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
29.09.2004, 20:59
    #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
30.09.2004, 09:32
    #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
30.09.2004, 13:16
    #32718600
raur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
MikeTech НО часть строки "31 Jan 04" не получается преобразовать в "01-01-2004"...

так не будет
ты хочешь превратиь 31 января в 1 января! волшебник что-ли?
а так все через format идет
...
Рейтинг: 0 / 0
30.09.2004, 14:14
    #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
30.09.2004, 16:29
    #32718837
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
Мда. Нужно мутить с локальными установками машины.

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

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





Magnus
...
Рейтинг: 0 / 0
30.09.2004, 16:42
    #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
30.09.2004, 16:43
    #32718860
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
2 Magnus23
это конечно не красиво - использовать предопределённый масив названий месяцев, но на время работы программы - менять менять локальные установки - ещё хуже.
...
Рейтинг: 0 / 0
30.09.2004, 16:51
    #32718885
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
marvan2 Magnus23
это конечно не красиво - использовать предопределённый масив названий месяцев, но на время работы программы - менять менять локальные установки - ещё хуже.
Не менять а читать и работать исходя из текущих.
...
Рейтинг: 0 / 0
30.09.2004, 17:01
    #32718912
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
2 MikeTech
Весьма странно. Только что установил твой формат, запустил тот же код в макросе VBA, результат одинаков. Код отработал без проблем. Причем пробовал штук 5 разных форматов, все ок.
Не знаю играет ли какую-то роль версия ворда, в vba я не специалист.
Офис русский?



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

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



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

Magnus

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

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

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

Magnus
...
Рейтинг: 0 / 0
01.10.2004, 16:45
    #32720470
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
Magnus23Думаю в этом случае проще делать Replace месяца в соответствиии с региональными установками и далее обычным образом.
А если дата вида "31 Jan 04 00:50:24" - получена исходно в виде строки? Например из БД или текстового файла? А это скорее всего так и есть. При чём здесь региональные установки? Очень может быть, что названия месяцев в приведённом мной массиве - не совпадают с остальными месяцами (у меня для английского, а может это норвежский). Но как по дате определить при каких региональных установках она была сформирована и самое главное - зачем это делать?
...
Рейтинг: 0 / 0
01.10.2004, 16:57
    #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
01.10.2004, 17:00
    #32720511
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
А если дата вида "31 Jan 04 00:50:24" - получена исходно в виде строки?
Я имел ввиду, в зависимости от региональных установок делать замену месяца.
Т.е. если русский то заменять на русский.
Пару enum'ов прописать проблемы не составляет думаю.

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

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

Magnus
...
Рейтинг: 0 / 0
01.10.2004, 17:13
    #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
01.10.2004, 17:18
    #32720567
MegaDimon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
Мне понравилась идея конвертить дату на SQL Servere. Это наверное был прикол такой :) / Мне это напоминает как в одном фильме зубы лечили через жопу :) Сорри если кто обиделся. :)
...
Рейтинг: 0 / 0
01.10.2004, 17:24
    #32720587
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
MegaDimonМне понравилась идея конвертить дату на SQL Servere. Это наверное был прикол такой :) / Мне это напоминает как в одном фильме зубы лечили через жопу :) Сорри если кто обиделся. :) А это смотря какая задача стоит. Если это задача импорта старых данных в новую базу (довольно частая задача), то конвертация их на сервере - вполне приемлемый вариант, т.к. данные все равно надо записать в базу.
...
Рейтинг: 0 / 0
01.10.2004, 17:32
    #32720607
MegaDimon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
Согласен, если паботает с БД то я двумя руками за такой метод, но если человеку нужно всего лишь конвертировать данные из строки ввода, то нужен другой способ.
...
Рейтинг: 0 / 0
04.10.2004, 20:10
    #32722972
MikeTech
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование в дату.
Задача стоит в преобразовании из текстового файла в Access, соответственно там есть поле с датой. в файле дата в формате "31 Jan 04 00:50:24" и т.д. Судя по топикав из других форумов нужно инсертить в формате YYYYDDMM hhmiss.

Вот такая вот задачка.
...
Рейтинг: 0 / 0
05.10.2004, 10:07
    #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
05.10.2004, 11:14
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Преобразование в дату. / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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