Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
17 / 18 / 1
Регистрация: 23.04.2012
Сообщений: 604
1

Как вычислить разницу в годах между двумя датами?

20.07.2013, 10:05. Просмотров 1533. Ответов 9
Метки нет (Все метки)


Задачка школьного уровня но напрочь забыл(. Осложняется еще и тем, что первоначальная дата задается пользователем в трех текстовых окнах: день, месяц, год. Как ее преобразовать в тип date?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2013, 10:05
Ответы с готовыми решениями:

Как вычислить разницу между датами
Господа подскажите в программе нужно узнать разницу времени между началом заезда автомобиля и его...

Получение интервала между двумя датами в DGV
Уважаемые форумчане. не могу решить одну проблему. Проблема в том что сравнить двух дат и покрасит...

Определить количество дней четвертого числа между двумя датами
Перед мной стоит задача определить сколько к примеру 4-тых чисел между датой N1 и датой N2 К...

Вычислить количество дней между датами
Нужно вычислить количество дней между датами. Есть стандартные функции?

9
1226 / 1036 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
20.07.2013, 11:57 2
vb.net
1
2
        Dim dt As New DateTime(CInt(YearTB.Text), CInt(MonthTB.Text), CInt(DayTB.Text))
        Dim diffYear As Integer = (DateTime.Now - dt).Days / 365
0
6 / 6 / 0
Регистрация: 16.09.2012
Сообщений: 71
20.07.2013, 15:58 3
Тут много вариантов на самом деле.
Я преобразовываю в дату по старинке через
vb.net
1
CDate(string)
Разницу в годах узнавал бы с помощью
vb.net
1
DateDiff(DateInterval.Year, Date1, Date2)
0
60 / 58 / 10
Регистрация: 16.02.2013
Сообщений: 146
20.07.2013, 16:35 4

Не по теме:

Можно и заняться мазохизмом, ну или саморазвитием, у меня эти понятия бывает совпадают:)!


Например привести введённые даты в юлианскую форму, потом из одной вычесть другую и преобразовать обратно в григорианскую
0
6 / 6 / 0
Регистрация: 16.09.2012
Сообщений: 71
20.07.2013, 16:44 5
Цитата Сообщение от Евгений12 Посмотреть сообщение
Например привести введённые даты в юлианскую форму, потом из одной вычесть другую и преобразовать обратно в григорианскую
Покажите! Мне лично интересно
0
60 / 58 / 10
Регистрация: 16.02.2013
Сообщений: 146
20.07.2013, 17:23 6
Ну раз кто-то интересуется, выложу на всеобщее обозрение
Вот функция которая принимает григорианскую дату (d-день, m-месяц, y-год) и возвращает юлианский день
Кликните здесь для просмотра всего текста
vb.net
1
2
3
4
5
6
7
8
9
    Private Function GTJ(ByVal d As Byte, ByVal m As Byte, ByVal y As Integer)
        If m <= 2 Then
            y = y - 1
            m = m + 12
        End If
        Dim A As Double = Int(y / 100)
        Dim B As Double = 2 - A + Int(A / 4)
        Return Int(365.25 * (y + 4716)) + Int(30.6001 * (m + 1)) + d + B - 1524.5 + 0.5
    End Function


А вот функция которая принимает юлианский день (j) и возвращает массив состоящий из трех элементов (0-день, 1-месяц, 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
    Private Function JTG(ByVal j As Double)
        Dim mas() As Integer
        j = j + 0.5
        Dim Z As Long = Fix(j)
        Dim F As Double = j - Z
        Dim A As Long
        If Z < 2299161 Then A = Z
        If Z >= 2299161 Then
            Dim alfa As Integer = Int((Z - 1867216.25) / 36524.25)
            A = Z + 1 + alfa - Int(alfa / 4)
        End If
        Dim B As Double = A + 1524
        Dim C As Double = Int((B - 122.1) / 365.25)
        Dim D As Double = Int(365.25 * C)
        Dim W As Double = Int((B - D) / 30.6001)
        Dim day As Integer = Int(B - D - Int(30.6001 * W) + F)
        Dim manth As Integer
        Dim y As Integer
        If W < 14 Then
            manth = W - 1
        End If
        If W = 14 Or W > 14 Then
            manth = W - 13
        End If
        'Stop
        If manth > 2 Then
            y = C - 4716
        End If
        If manth <= 2 Then
            y = C - 4715
        End If
        mas = {day, manth, y} 'создаем массив который заполняем значениями дня, месяца, года
        Return mas
    End Function


Мы берем две григорианские даты и преобразуем их в юлианскую форму. Потом из одной вычитаем другую и получаем разницу между датами в днях, которую прогоняем через вторую функцию, как то так. Второй элемент массива должен разницей между датами в годах. Сам не проверял, но должно работать!
1
6 / 6 / 0
Регистрация: 16.09.2012
Сообщений: 71
20.07.2013, 17:26 7
Евгений12, клаасс... а это для чего эта затея с конвертированием даты была проведена? если не секрет
0
60 / 58 / 10
Регистрация: 16.02.2013
Сообщений: 146
20.07.2013, 17:46 8
Цитата Сообщение от Ivanmsk Посмотреть сообщение
если не секрет
Не секрет. Когда-то потребовалась необходимость конвертации даты из григорианской в юлианскую и обратно. Нашел алгоритм, запилил в функции, ну что бы многоразово можно было пользоваться. Забирайте, разбирайте! Если ошибки найдете или что улучшите буду только рад!
1
Заблокирован
20.07.2013, 21:10 9
Цитата Сообщение от Евгений12 Посмотреть сообщение
Нашел алгоритм, запилил в функции
Цитата Сообщение от Евгений12 Посмотреть сообщение
Сам не проверял, но должно работать!
Написали функции и не знаете работают ли они
0
60 / 58 / 10
Регистрация: 16.02.2013
Сообщений: 146
20.07.2013, 21:11 10
Цитата Сообщение от Евгений12 Посмотреть сообщение
Второй элемент массива должен разницей между датами в годах. Сам не проверял, но должно работать!
Поправка!
Функция рассчитывает корректную дату с учетом до и после нашей эры. Учитывайте это если будете использовать функции!
Это я к тому что именно для цели подсчета количества лет между двумя датами такой способ неприменим. Однако количество дней полученное в результате будет точно (см. сообщение №6)!

Цитата Сообщение от Release Посмотреть сообщение
Написали функции и не знаете работают ли они
Функции работают, это точно. Но начав проверять предложенный мной способ (на моем возрасте проверял), в результате получил что мне -4700 лет . Почему такая штука выходит смотрите строчками выше!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2013, 21:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Посчитать разницу в годах между двумя датами
Встроенный DATEDIFF работает лениво и на SELECT DATEDIFF(year,'21.11.2011','20.11.2012') ответит...

Как посчитать разницу между датами в годах?
Здравствуйте! Не могу понять как посчитать разницу между двумя датами в годах. Например, человек...

Вычислить разницу между двумя датами
1. есть ли функция которая вычислит сколько прошло например с 1934 до 2014. 2. как вычислить сраж...

Найти разницу между датами в годах
Задание Написать программу с участием типа DateTime, TimeSpan. Ввести 2 даты Найти разницу между...


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

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

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