Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/23: Рейтинг темы: голосов - 23, средняя оценка - 4.83
surikk66
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 16
#1

Разница между датами в формате "год/мес/день"

06.06.2012, 23:49. Просмотров 4074. Ответов 7
Метки нет (Все метки)

Простая вроде задачка, но Бейсик я увидел тока сегодня первый день
потратил 2 часа на изучение функций связаны с датами, но почему то не нашел нужной
в результате накидал вот такое пугало:

vb.net
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
29
30
31
32
33
34
35
36
        Dim TimeEnd As Date = New Date(2012, 12, 12)
        Dim D As Integer
        Dim M As Integer
        Dim Y As Integer
        Dim Rslt As String = "До конца света осталось: "
 
        If Date0.Value.Day <= TimeEnd.Day Then
            Y = DateDiff(DateInterval.Year, Date0.Value, TimeEnd)
            M = DateDiff(DateInterval.Month, DateAdd(DateInterval.Year, (Y), Date0.Value), TimeEnd)
            D = TimeEnd.Day - Date0.Value.Day
        Else
            Y = DateDiff(DateInterval.Year, Date0.Value, TimeEnd)
            M = DateDiff(DateInterval.Month, DateAdd(DateInterval.Year, (Y), Date0.Value), TimeEnd) - 1
 
            If M = -1 Then
                M = 11
                Y = Y - 1
            End If
 
            D = DateDiff(DateInterval.Day, Date0.Value, DateAdd(DateInterval.Month, (-M - 12 * Y), TimeEnd)) + 1
        End If
 
 
        If Y > 0 Then
            Rslt = CStr(Y) + " г.  "
        End If
 
        If M > 0 Then
            Rslt = Rslt + CStr(M) + " мес.  "
        End If
 
        If D > 0 Then
            Rslt = Rslt + CStr(D) + " дн.  "
        End If
 
        Label1.Text = Rslt
---------------------------------------------------------------------------------

работает, но как то "не красиво" выглядит
есть как поще сделать ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 23:49
Ответы с готовыми решениями:

Обработка "null" в MS Access "Приведение типа "|DBNull" к типу "String" является недопустимым"
Здравствуйте. Работаю с базой MS Access Вывожу в DataGridView таблицу...

Таймер - сделать отсчет времени в формате "mm:ss"
Как сделать сделать отсчет времени в формате &quot;mm:ss&quot; например с 05:00 до 00:00?...

Обработка строки с датой в формате "dd.mm.yy"
Из строки, содержащей корректно заданную дату в формате &quot;dd.mm.yy&quot;, где dd -...

Поиск в DGW вылетает с ошибкой "Приведение типа "|DBNull" к типу "String" является недопустимым."
В общем такой вопрос. Код рабочий. Только у меня не работает. For i = 0...

Ошибка "Приведение строки "explorer.exe" к типу "Double" является недопустимым" при записи в реестр
Помогите, хочу получить доступ к winlogon, что бы изменять любое другое...

7
kOS_77
193 / 185 / 9
Регистрация: 14.06.2011
Сообщений: 495
07.06.2012, 00:19 #2
А что это ?

Добавлено через 4 минуты
Date0 это кто ?
0
surikk66
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 16
07.06.2012, 00:41  [ТС] #3
Date0 - это значение вводимое через DataTimerPiker

задача выводить календарную разницу между датами
тут я за вторую дату взял 12/12/2012(КС), а первую варьировал

нужно учитывать что в месяцах бывает 30, 31, 28 и 29 дней
С 20 февраля 2012 до КС 9 мес. и 21 дня
а с 20 мая 2012 до КС 6 мес и 23 дня

из за этого использовать просто функцию DateSerial() не получается
0
kOS_77
193 / 185 / 9
Регистрация: 14.06.2011
Сообщений: 495
07.06.2012, 00:44 #4
понял, на форме значит дэйтТаймПикер и лэйбл...
0
Gilf
10 / 10 / 0
Регистрация: 27.04.2012
Сообщений: 38
08.06.2012, 11:54 #5
Цитата Сообщение от Памирыч Посмотреть сообщение
Работа с датами, временем

Как прибавить к текущей дате определенное количество часов, дней, месяцев и т.д.
vb.net
1
2
3
        Dim D As Date
        D = D.AddDays(50)
        MsgBox(D.ToLongDateString)
Либо так:

vb.net
1
2
        Dim D As Date = Now
        MsgBox(DateAdd(DateInterval.Day, 45, D))
Вычитание делается по той же схеме, но с отрицательными значениями.


Разница между двумя датами в днях, месяцах и т.д.
vb.net
1
2
3
        Dim D As Date = #7/23/2011#
        Dim N As Date = Now
        MsgBox(DateDiff(DateInterval.Day, D, N)) 'Разница в днях


Получить текущую дату и время
vb.net
1
        MsgBox(Now.ToLongDateString & ", " & Now.ToLongTimeString)


Узнать день недели
vb.net
1
        MsgBox(Format(D, "dddd"))


День недели в численном представлении
vb.net
1
        MsgBox(D.DayOfWeek)


Узнать, високосный год или нет
vb.net
1
        MsgBox(Date.IsLeapYear(Now.Year))


Установить в компьютере системное время и дату
vb.net
1
2
        TimeString = "23:04:10"
        DateString = "8/24/2011"


Подробнее о форматировании дат.
Мы можем использовать даты и время еще гибче, благодаря функции Format.
Например:

vb.net
1
2
3
        Dim D As Date = Now
        Dim FormatString As String
        MsgBox(Format(D, FormatString))
Основные значения FormatString:

%sСекунды, если спереди ноль - он не пишется
fffМилисекунды
ssСекунды, всегда двузначное число
%mМинуты, если спереди ноль - он не пишется
mmМинуты, всегда двузначное число
%hАналогично
hhс часами (представление от 0 до 12)
HHс часами (Представление от0 до 24)
%MАналогично
MMс месяцами
dddДень недели, в сокращенном виде, например, Пн
ddddТо же, но слово целиком, например, понедельник
MMMМесяц, в сокращенном виде, например, янв
MMMMТо же, но в полном
%yГод, в сокращенном виде, 2 последние цифры, если предпоследняя не 0 и одна в противном случае
yyГод, 2 цифры в любом случае, например, 1996 год - 96
yyyyГод целиком

Исходя из этого, легко составлять свои строки для вывода информации:
dd-MM-yyyy
Или
vb.net
1
2
        Dim D As Date = Now
        MsgBox(Format(D, "Сегодня dd -е число, год yyyy, а день недели - dddd, а месяц -  MMMM"))
Обращаю внимание на регистр букв, т.е. если написать не dd, а DD или Dd, то формат не будет распознан
Вот что писал Памирыч... Просто выводит разницу в днях
0
Nachrichter
594 / 552 / 86
Регистрация: 19.03.2012
Сообщений: 1,071
08.06.2012, 14:41 #6
Цитата Сообщение от Gilf Посмотреть сообщение
Просто выводит разницу в днях
По сабжу эта разница должна быть отражена в формате "год/месяц/день". Вот так, наверное:

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Class Form1
    Public x, y As Date
    Public day, month, year As Long
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        x = ("2012, 12, 12")
    End Sub
 
    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
        y = DateTimePicker1.Value
        day = DateDiff(DateInterval.Day, y, x)
        month = DateDiff(DateInterval.Month, y, x)
        year = DateDiff(DateInterval.Year, y, x)
        TextBox1.AppendText(day & " дней" & month & " месяцев" & year & " лет")
    End Sub
End Class
0
surikk66
0 / 0 / 0
Регистрация: 06.06.2012
Сообщений: 16
10.06.2012, 01:19  [ТС] #7
в результате мы получим ответ типа: "3 года 42 месяца 1153 дня" - что не приемлемо

я уже 3 метода придумал - но все 20+ строк кода всякой фигни

есть команда которая возвращает количество дней в текущем месяце?
вся завозка в том что не понятно как определить 30 дней это больше или меньше 1 мес
0
Nachrichter
594 / 552 / 86
Регистрация: 19.03.2012
Сообщений: 1,071
10.06.2012, 10:38 #8
Цитата Сообщение от surikk66 Посмотреть сообщение
есть команда которая возвращает количество дней в текущем месяце?
vb.net
1
Date.DaysInMonth()
0
10.06.2012, 10:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 10:38

Ошибка при запуске .exe файла из debug: "Приведение строки "Июнь" к типу "Double" является недопустимым"
Если запускать из самого проекта(F5), то все нормально, а если скомпилированный...

Оператор "+" для типов "String" и "System.Windows.Forms.ComboBox.ObjectCollection" не определен
Доброго времени суток,подскажите решение проблемы К комбобоксам привязал БД...

Как исправить ошибку "Приведение строки "" к типу "Double" является недопустимым"?
Выдает ошибку в строке nasel(n).mat = Int(line(2)). Приведение строки &quot;&quot; к типу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru