Системная дата...

Обсуждение проблем, возникающих при разработке программ для мобильных устройств.
Arioh
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.12.2004 (Вт) 14:43
Откуда: 2:5020

Системная дата...

Сообщение Arioh » 14.12.2004 (Вт) 17:38

Доброго времени суток... Не подскажите, как в eVB получить системную дату формата "дд.мм.гггг"? А то при помощи FormatDateTime получается только "мм.дд.гггг"....
Arioh

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 14.12.2004 (Вт) 20:52

Можно по-ламерски 8)
Код: Выделить всё
Str$ = DatePart("d", Date) & "." & DatePart("m", Date) & "." & DatePart("yyyy", Date)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.12.2004 (Вт) 20:58

А чё б не так:
Код: Выделить всё
Str$ = Day(Date) & "." & Month(Date) & "." & Year(Date)
:?:
Изображение

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 14.12.2004 (Вт) 21:05

Код: Выделить всё
Format$(Date, "dd\.mm\.yyyy")

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 14.12.2004 (Вт) 21:14

skiperski, с возвращением! :cheers:
Только вот в eVB нету функции Format :wink:

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 14.12.2004 (Вт) 21:54

A.A.Z. писал(а):skiperski, с возвращением! :cheers:

Спасибо, я не на долго

A.A.Z. писал(а):Только вот в eVB нету функции Format :wink:

Уже третий раз на эти грабли наступаю - не смотрю на раздел форума.

Тогда так:
Код: Выделить всё
Public Function LZero(ByVal Number As Long, ByVal Length As Long) As String
    LZero = Number
    If (Len(LZero) < Length) Then LZero = Right$(String$(Length, "0") & Number, Length)
End Function

Public Function FormatDate(ByVal d As Date) As String
    FormatDate = LZero(Day(d), 2) & "." & LZero(Month(d), 2) & "." & LZero(Year(d), 4)
End Function


Синтаксис правьте сами

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 14.12.2004 (Вт) 23:39

Это типа парсер для даты. Работает почти как стандартный Format(). Использованы простые функции, недостающие типы можно объявить самому или переобъявить как Long.
Код: Выделить всё
Public Function FormatDateEx(ByVal d As Date, Optional ByVal mask As String = vbNullString, Optional ByVal FirstDayOfWeek As VbDayOfWeek = vbUseSystemDayOfWeek) As String
   
    Dim i As Long 'counter
    Dim ch As String 'single character
    Dim s As String 'buffer
    Dim state As Long 'current state
    Dim state0 As Long 'state of previous step
    Dim doFormat As Boolean 'flag
   
    'state values
    '0 - start
    '10 - days "d"
    '20 - month "m"
    '30 - year "y"
    '40 - week "w"
    '50 - second "s"
    '60 - minute "n"
    '70 - hour "h"
    '80 - time "ttttt"
    '99 - any other symbole
    '100 - end
   
    If (Len(mask) = 0) Then mask = "ddddd ttttt" 'by default
   
    For i = 1 To Len(mask) + 1
       
        ch = Mid$(mask, i, 1) 'read char
        state0 = state 'save previous state
       
        Select Case LCase$(ch)
        Case ""
            doFormat = True
            state = 100
        Case "d"
            If (state > 0 And state <> 10) Then doFormat = True
            state = 10
        Case "m"
            If (state > 0 And state <> 20) Then doFormat = True
            state = 20
        Case "y"
            If (state > 0 And state <> 30) Then doFormat = True
            state = 30
        Case "w"
            If (state > 0 And state <> 40) Then doFormat = True
            state = 40
        Case "s"
            If (state > 0 And state <> 50) Then doFormat = True
            state = 50
        Case "n"
            If (state > 0 And state <> 60) Then doFormat = True
            state = 60
        Case "h"
            If (state > 0 And state <> 70) Then doFormat = True
            state = 70
        Case "t"
            If (state > 0 And state <> 80) Then doFormat = True
            state = 80
        Case Else
            If (state > 0 And state <> 99) Then doFormat = True
            state = 99
        End Select
       
        If (doFormat) Then
           
            Select Case state0
            Case 10
                Do While (Len(s))
                    If (Len(s) > 5) Then 'dddddd - long date
                        FormatDateEx = FormatDateEx & FormatDateTime(d, vbLongDate)
                        s = Mid$(s, 7)
                    ElseIf (Len(s) > 4) Then 'ddddd - short date
                        FormatDateEx = FormatDateEx & FormatDateTime(d, vbShortDate)
                        s = Mid$(s, 6)
                    ElseIf (Len(s) > 3) Then 'dddd - long weekday name
                        FormatDateEx = FormatDateEx & WeekdayName(Weekday(d, FirstDayOfWeek), False, FirstDayOfWeek)
                        s = Mid$(s, 5)
                    ElseIf (Len(s) > 2) Then 'ddd - short weekday name
                        FormatDateEx = FormatDateEx & WeekdayName(Weekday(d, FirstDayOfWeek), True, FirstDayOfWeek)
                        s = Mid$(s, 4)
                    Else 'dd or d - day number with or without leading zero
                        FormatDateEx = FormatDateEx & LZero(Day(d), Len(s))
                        s = vbNullString
                    End If
                Loop
               
            Case 20
                Do While (Len(s))
                    If (Len(s) > 3) Then 'mmmm - long month name
                        FormatDateEx = FormatDateEx & MonthName(Month(d), False)
                        s = Mid$(s, 5)
                    ElseIf (Len(s) > 2) Then 'mmm - short month name
                        FormatDateEx = FormatDateEx & MonthName(Month(d), True)
                        s = Mid$(s, 4)
                    Else 'mm or m - month number with or without leading zero
                        FormatDateEx = FormatDateEx & LZero(Month(d), Len(s))
                        s = vbNullString
                    End If
                Loop
               
            Case 30
                Do While (Len(s))
                    If (Len(s) > 3) Then 'yyyy - long year number
                        FormatDateEx = FormatDateEx & LZero(Year(d), 4)
                        s = Mid$(s, 5)
                    ElseIf (Len(s) > 1) Then 'yy - short year number
                        FormatDateEx = FormatDateEx & LZero(Right$(Year(d), 2), 2)
                        s = Mid$(s, 3)
                    Else 'y - days of beginning year
                        FormatDateEx = FormatDateEx & DateDiff("d", DateSerial(Year(d), 1, 0), d)
                        s = vbNullString
                    End If
                Loop
               
            Case 40
                Do While (Len(s))
                    If (Len(s) > 1) Then 'ww - number of current week
                        FormatDateEx = FormatDateEx & DatePart("ww", d, FirstDayOfWeek)
                        s = Mid$(s, 3)
                    Else 'w - weekday number
                        FormatDateEx = FormatDateEx & Weekday(d, FirstDayOfWeek)
                        s = vbNullString
                    End If
                Loop
               
            Case 50
                Do While (Len(s))
                    If (Len(s) > 1) Then 'ss - seconds with leading zero
                        FormatDateEx = FormatDateEx & LZero(Second(d), 2)
                        s = Mid$(s, 3)
                    Else 's - seconds without leading zero
                        FormatDateEx = FormatDateEx & Second(d)
                        s = vbNullString
                    End If
                Loop
               
            Case 60
                Do While (Len(s))
                    If (Len(s) > 1) Then 'nn - minutes with leading zero
                        FormatDateEx = FormatDateEx & LZero(Minute(d), 2)
                        s = Mid$(s, 3)
                    Else 'm - minutes without leading zero
                        FormatDateEx = FormatDateEx & Minute(d)
                        s = vbNullString
                    End If
                Loop
               
            Case 70
                Do While (Len(s))
                    If (Len(s) > 1) Then 'hh - hours with leading zero
                        FormatDateEx = FormatDateEx & LZero(Hour(d), 2)
                        s = Mid$(s, 3)
                    Else 'h - hours without leading zero
                        FormatDateEx = FormatDateEx & Hour(d)
                        s = vbNullString
                    End If
                Loop
               
            Case 80
                Do While (Len(s))
                    If (Len(s) > 4) Then 'ttttt - long time
                        FormatDateEx = FormatDateEx & FormatDateTime(d, vbLongTime)
                        s = Mid$(s, 6)
                    Else 'nothing
                        FormatDateEx = FormatDateEx & s
                        s = vbNullString
                    End If
                Loop
               
            Case Else 'other chars
                FormatDateEx = FormatDateEx & s
               
            End Select
           
            s = vbNullString 'reset buffer
            doFormat = False 'reset flag
           
        End If
       
        s = s & ch 'add char in buffer
       
    Next
   
End Function

Arioh
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.12.2004 (Вт) 14:43
Откуда: 2:5020

Сообщение Arioh » 15.12.2004 (Ср) 11:17

A.A.Z. писал(а):Можно по-ламерски 8)
Код: Выделить всё
Str$ = DatePart("d", Date) & "." & DatePart("m", Date) & "." & DatePart("yyyy", Date)


Thanx! Все заработало :)
Arioh

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 15.12.2004 (Ср) 14:27

Arioh писал(а):Thanx! Все заработало :)


1. Проверь дату, например: 01.02.2004. В этой реализации получишь "1.2.2004", а не как ожидалось "01.02.2004".
2. Гипотетическая ситуация: последние миллисекунды последнего дня месяца, например 31.10.2004. Первый вызов DatePart() отрабатывает сегодня, а второй и третий уже завтра. Получаем: 31.11.2004

Arioh
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.12.2004 (Вт) 14:43
Откуда: 2:5020

Сообщение Arioh » 15.12.2004 (Ср) 15:05

skiperski писал(а):
Arioh писал(а):Thanx! Все заработало :)


1. Проверь дату, например: 01.02.2004. В этой реализации получишь "1.2.2004", а не как ожидалось "01.02.2004".
2. Гипотетическая ситуация: последние миллисекунды последнего дня месяца, например 31.10.2004. Первый вызов DatePart() отрабатывает сегодня, а второй и третий уже завтра. Получаем: 31.11.2004[/quote



1. Ну с датой все довольно просто.. Я числам от 1 до 9 при выводе просто 0 пририсовываю, так что "01.02.2004" вполне получается.
2. Так можно один раз считать значение Date в переменную, к которой потом применять DatePart().
Arioh


Вернуться в Visual Basic для мобильных устройств

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList