Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: Как считать дату? Добавлено: 21.07.05 16:39  

Автор вопроса:  HACKER
Нужна ф-ция для счёта даты и время. Пример CyRax'a некатит, он считает только дату назад, а мне надо и вперёд, и вроде глюки там есть. Можно конечно самому написать, но там много всего учитывать (сколько дней в месяце, высокосный год итп...) Может кто-то уже занимался таким?

Ответить

  Ответы Всего ответов: 63  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 21.07.05 16:49
Занимались.
Программисты Майкрософт.

DateAdd
DateDiff

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 21.07.05 17:05
А чем обычный DateTime + TimeSpan (или как они в VB6 правильно называются?)
не подходят?

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 21.07.05 17:06
Угу, ихний опыт я и перенял. А глюки скорее всего у тебя в голове. ;)

Ответить

Номер ответа: 4
Автор ответа:
 dimailer



Вопросов: 9
Ответов: 27
 Профиль | | #4 Добавлено: 21.07.05 20:37
Допустим:
---
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Label1.Text = Today

    End Sub
---
Ясьненько?

Ответить

Номер ответа: 5
Автор ответа:
 dimailer



Вопросов: 9
Ответов: 27
 Профиль | | #5 Добавлено: 21.07.05 20:41
Sorry
---
Я написал только как считатать дату, а время вот так:
---
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Label1.Text = TimeOfDay

    End Sub
---
Ясьненько?

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 21.07.05 20:46
Label1.Text = Today

Считать дату:
Label1.Text = Now.Tostring("d.M.yyyy";)


Label1.Text = TimeOfDay

Считать время:
Label1.Text = Now.ToString("h:mm:ss";)

Ответить

Номер ответа: 7
Автор ответа:
 dimailer



Вопросов: 9
Ответов: 27
 Профиль | | #7 Добавлено: 21.07.05 21:47
Label1.Text = Today, это тоже самое как Label1.Text = Now.Tostring("d.M.yyyy";), просто я написал более "простой" код.

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 21.07.05 22:23
блин, наверно криво высказался. Нужна функция для счёта даты в двух направлениях, назад и вперед, в учётом всех прибамбасов (год высокосный, кол- дней в месяце итп...) У кого такая есть? По поводу DateAdd и DateDiff - ацтой, нечего не получается с ней.

Это вроде CyRax'a, чуть переделана мной, сам принцип не менялся, вообщем


Public Function CalcAge(Years, Month, Days) As String


On Error GoTo ErrInWork
z = Date
z4 = DateSerial(Years, Month, Days)
z5 = DateSerial(DatePart("YYYY", z), Month, Days)
z6 = DateSerial(DatePart("YYYY", z), DatePart("m", z), Days)

MyYea = DateDiff("yyyy", z4, z)
MyMon = DateDiff("m", z, z5)
If MyMon < 0 Then MyYea = MyYea - 1: MyMon = 12 + MyMon
MyDay = DateDiff("d", z6, z)
If MyDay < 0 Then
 MyMon = MyMon - 1
 For DiCM = 32 To 28 Step -1
  z7 = DateSerial(DatePart("YYYY", z), DatePart("m", z), DiCM)
  If DatePart("d", z7) = DiCM Then Exit For
 Next DiCM
 MyDay = DiCM + MyDay
End If



CalcAge = MyDay & "." & MyMon & "." & MyYea

Exit Function
ErrInWork:
MsgBox "Произошла ошибка во время расчёта:" & Chr(13) & Error, 16, Err: Resume ErrInWork2
ErrInWork2:
End Function


нехрена не работает, считает фигю какую то, далее DateDiff...



y = DateDiff("yyyy", Date, "21.07.2006";)
m = DateDiff("m", Date, "21.07.2006";)
d = DateDiff("d", Date, "21.07.2006";)


Тестировалось 21-ого числа, возвращает:
y = 1
m = 12
d = 365
Нах он такое возвращает? Нужно y=1; m = 0; d = (не считал, но тоже ~0)

а это полная фигня!

Чё подскажите?


Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 21.07.05 23:16
Label1.Text = Today, это тоже самое как Label1.Text = Now.Tostring("d.M.yyyy";), просто я написал более "простой" код.

:-\
Учим матчасть.

Свойство Microsoft.VisualBasic.DateAndTime.Today
Имеет тип DateTime (стандартный тип для хранения даты/времени).
Возвращает текущую дату, при этом время устанавливается равным полуночи (00:00:00).

Свойство Microsoft.VisualBasic.DateAndTime.TimeOfDay.
Тип аналогичный - DateTime.
Возвращает текущее время, при этом дата устанавливается в 1.01.0001.

И лично для меня пока остается загадкой, почему при присвоении такого свойства строковой переменное получается 22:14:24, а не 01.01.0001 22:14:24.

Оба эти свойства оставлены исключительно для обратной совместимости (ДА, СОВМЕСТИМОСТИ!) с программами, написанными на VB6. То есть, для того, чтоб можно было скопировать код, написанный на VB6, вставить в код .NET-программы и не переписывать код для работы с типом DateTime.

В то время, если имеется некая функция, оставленная для совместимости и CLS-совместимый аналог, то рекомендуется использовать именно CLS-аналог - для той же СОВМЕСТИМОСТИ.

Далее - если ты помнишь, ToDay имеет тип DateTime, ты же его НЕЯВНО приводишь к String.
Включи жесткую проверку типов и увидишь, где у тебя ошибки - при приведении типа DateTime к типу String.

Вобщем, твой код может быть проще и короче, но он принципиально неверен.

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 21.07.05 23:53
т.е.

y = DateDiff("yyyy", Date, "21.07.2006";)


"21.07.2006"
это строка, и именно поэтому не работает?

Хорошо, риторический вопрос, как сделать шоб работало?

Ответить

Номер ответа: 11
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #11 Добавлено: 22.07.05 01:42
Чё мучаетесь?

Function date_difference_to_string(first_date As Date, second_date As Date) As String
    Dim AD          As Date
    Dim new_date    As Date
    
    d = DateDiff("d", first_date, second_date)
    If d < 0 Then
        AD = first_date
        first_date = second_date
        second_date = AD
        d = DateDiff("d", first_date, second_date)
    End If
    y = DateDiff("yyyy", first_date, second_date)
    m = DateDiff("m", first_date, second_date)
    y = y - 1
    If y = -1 Then y = 0
    m = m - 1
    If m = -1 Then m = 0
    m = m Mod 12
    AD = y * 12 + m
    new_date = DateAdd("m", AD, first_date)
    d = DateDiff("d", new_date, second_date)
    date_difference_to_string = "&#208;&#224;&#231;&#237;&#232;&#246;&#224; &#228;&#224;&#242;: " & y & " &#235;&#229;&#242;, " & m & " &#236;&#229;&#241;&#255;&#246;&#229;&#226;, " & d & " &#228;&#237;&#229;&#233;."
    Debug.Print y
    Debug.Print m
    Debug.Print d
    
End Function

Private Sub Form_Load()
    Debug.Print date_difference_to_string(Date, "21.07.2018";)
End Sub

Ответить

Номер ответа: 12
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #12 Добавлено: 22.07.05 01:44
Задолбали эти раскладки !
Блин, хоть бы какую правку придумали, чтобы исправить можно было :(


Function date_difference_to_string(first_date As Date, second_date As Date) As String
    ;Dim AD As Date
    ;Dim new_date As Date
    
    d = DateDiff("d", first_date, second_date)
    If d < 0 Then
        AD = first_date
        first_date = second_date
        second_date = AD
        d = DateDiff("d", first_date, second_date)
    End If
    y = DateDiff("yyyy", first_date, second_date)
    m = DateDiff("m", first_date, second_date)
    y = y - 1
    If y = -1 Then y = 0
    m = m - 1
    If m = -1 Then m = 0
    m = m Mod 12
    AD = y * 12 + m
    new_date = DateAdd("m", AD, first_date)
    d = DateDiff("d", new_date, second_date)
    date_difference_to_string = "Разница дат: " & y & " лет, " & m & " месяцев, " & d & " дней."
    ;Debug.Print y
    ;Debug.Print m
    ;Debug.Print d
    
End Function

Private Sub Form_Load()
    ;Debug.Print date_difference_to_string(Date, "21.07.2018";)
End Sub

Ответить

Номер ответа: 13
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #13 Добавлено: 22.07.05 02:48
Хотя вру, неправильно считает :(

Ответить

Номер ответа: 14
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #14
Добавлено: 22.07.05 11:58
HACKER,
 А почему же у меня всё правильно считает? ;)

PS: Писал я это 2.5 года назад (как время летит).

Ответить

Номер ответа: 15
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #15 Добавлено: 22.07.05 12:01
Люди, просветите - а в чем, собсно, глюки?

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам