powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
9 сообщений из 9, страница 1 из 1
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934034
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VB6 я использовал:

Код: vbnet
1.
2.
3.
4.
5.
6.
  Public Function GetMyAccessDateTime(ByVal regionalDateTime As String) As String
    GetMyAccessDateTime = ""
    If IsDate(regionalDateTime) Then
      GetMyAccessDateTime = "#" & Format$(regionalDateTime, "mm\/dd\/yyyy hh:mm:ss") & "#" ' $ -это для VB6
    End If
  End Function



Здесь Format этого не умеет.
FormatDateTime в данном случае не катит.
Работаем со строками на входе и на выходе.
regionalDateTime - это например
DateSerial() & " " & TimeSerial()
но не всегда,
но всегда корректная строка для которой IsDate возвращает True (при текущих нац.настройках системы), т.е. например на русской системе:
"12.04.15 15:52:03"
на выходе должно быть
"#04\/12\/1915 15:52:03#"

Если только
DateTime.ToString Method (String) ???
Но мне удобнее работать со String на входе.
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934035
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вроде вот так удалось извратиться:
Код: vbnet
1.
2.
3.
4.
5.
6.
  Public Function GetMyAccessDateTime(ByVal regionalDateTime As String) As String
    GetMyAccessDateTime = ""
    If IsDate(regionalDateTime) Then
      GetMyAccessDateTime = "#" & CType(regionalDateTime, Date).ToString("MM\/dd\/yyyy hh:mm:ss") & "#"
    End If
  End Function



Надеюсь что это тоже самое.
(В .Net2 тоже фурычит)
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934113
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чет фигово после полудня стало:

Код: vbnet
1.
2.
3.
4.
12.04.2015 13:42:09 'вход
#04/12/2015 01:42:09# 'выход
12.04.2015 13:42:17 'вход
#04/12/2015 01:42:17# 'выход



Код из первого поста, при исполнении на VB6 такой фигни не лепит.
Че делать?

Идея как раз в том, что я закладываюсь на нац. настройки, неважно китайские они или японские.
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934122
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
  Public Function GetMyAccessDateTime(ByVal regionalDateTime As String) As String
    GetMyAccessDateTime = ""
    If IsDate(regionalDateTime) Then
      GetMyAccessDateTime = "#" & CType(regionalDateTime, Date).ToString("MM\/dd\/yyyy HH:mm:ss") & "#"
    End If
    Debug.Print(GetMyAccessDateTime)
  End Function


Похоже, или ненадежно?
Второй параметр (Culture) добавлять не рискую, нужно чтоб брал из системы.
На вход всегда подается строка дата+пробел+время в тек. национальном формате
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934126
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
regionalDateTime спарсить в нормальный тип DateTime, и в акссесс передавать параметром не пробовали?
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934137
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныregionalDateTime спарсить в нормальный тип DateTime, и в акссесс передавать параметром не пробовали?
+1... либо при конвертации в строку использовать всегда InvariantCulture (да простит меня Аллах - сам так делал)...
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934150
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я бы предпочел не менять логику описанную выше.
А этой логике соответствует второй параметр CultureInfo.CurrentCulture ,
либо его отсутствие:
DateTime.ToString - метод (String)Этот метод использует сведения о форматировании, полученные из данных о языке и региональных параметрах. Для получения дополнительной информации см. CurrentCulture.
Я просто не доразобрался с .Net-фичей что hh-это 12-часовой формат, а HH - 24-часовой:
Настраиваемый описатель формата "HH"
Исходя из этого приведенный мною крайний вариант таки правильный.
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934473
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дмитрий77Исходя из этого приведенный мною крайний вариант таки правильный.
Нет. Как выше уже писали, правильный вариант - использовать запросы с параметром.
Вот Вы сейчас потратили время на выяснение того, что Format с нужным форматированием все же есть. Потому что "так в
Дмитрий77В VB6 я использовал:
А вот если бы сразу, еще в VB6, использовали параметры, то сейчас все бы сразу и заработало.

Когда Вы будете переходить с Access на, допустим, Oracle или MS SQL - у вас опять возникнут проблемы, потому что там нет формата ДатыВремени "#04/12/1915 15:52:03#"
...
Рейтинг: 0 / 0
Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
    #38934576
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

М.б. ты и прав, но "как в VB6" устойчиво работало несколько лет без претензий со стороны юзеров (а их у меня много в разных нац. стандартах).
А вот когда я поначалу "чего-то там парсил", то претензии были, вплоть до крашей из-за даты/времени.

Идея в том, что для отображения я всегда воспроизвожу нац. формат системы,
либо это DateSerial+ пробел+ TimeSerial (это когда мне известны все компоненты или строка на входе в заранее известном формате)
либо это DateToString () часто неявно ,напр. когда я достаю "дату" из Access
либо напр. Now->ToString

А имеющуюся (всегда правильную для данного компа) строку я всегда могу конвертануть форматами в чего надо,
в частности в аксесовский #MM\/dd\/yyyy HH:mm:ss#.

Cat2Когда Вы будете переходить с Access на, допустим, Oracle или MS SQL - у вас опять возникнут проблемы,
Допустим. Но не факт что буду.
Если буду, то и будем решать. Нельзя заниматься всеми проблемами сразу (включая предполагаемые в будущем).

P.S. Ну, и я не использую Access как таковой, я использую
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    Try
      adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
       IO.Path.Combine(path_AppData, "log\mybase.mdb") & _
       ";Mode=Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password=mypass")
    Catch
      Try
        adoConn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
         IO.Path.Combine(path_AppData, "log\mybase.mdb") & _
         ";Mode=Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password=mypass")
      Catch
      End Try
    End Try


Причем второго провайдера я заложил в .Net исключительно для x64 тестов,
но продакшн однозначно будет 32-битный,
к сожалению на x64 нет такой необходимой штуки как
Код: vbnet
1.
2.
3.
   Try : my_JRO = CreateObject("JRO.JetEngine") : Catch : End Try
...
      If Not my_JRO Is Nothing Then my_JRO.RefreshCache(adoConn)



А время релаксации в 5 сек. при отсутствии возможности обновить кэш меня не устраивает.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как мне валидную строку с дата-время мувнуть в формат Access #mm\/dd\/yyyy hh:mm:ss# ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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