Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366

Добавить год по истечению времени

18.10.2013, 12:54. Показов 2001. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста как прибавить каждый раз один год к дате2 как только дата2 станет меньшей даты1 по истечению времени?

Вот код
C#
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
37
38
39
protected void timer1_tick(object sender, EventArgs e)
    {
        
        DateTime date1 = new DateTime();
        date1 = DateTime.Now;  //сегодняшняя дата
        DateTime date2; //дата до которой идем 
        TimeSpan interval; 
 
            date2 = new DateTime(2013, 10, 18, 11, 40, 00); // утанавливаем до какой даты нам считать интервал
 
 
        if (date2 > date1 )
        {
            interval = date2 - date1;
            days.Text = interval.Days.ToString();
            hours.Text = interval.Hours.ToString();
            minutes.Text = interval.Minutes.ToString();
            seconds.Text = interval.Seconds.ToString();
        }
 
        if (date2.Day == date1.Day && date2.Month==date1.Month)
        {
            Label1.Text = "Сегодня день ...";
        }
        else
        {
            Label1.Text = "";
        }
 
        if (date2 < date1)
        {
            interval = date2.AddYears(1) - date1; // вот здесь  я добавляю год но эта штука работает только один раз до 2014, а потом идет в минус, а должно прибавить год
 
            days.Text = interval.Days.ToString();
            hours.Text = interval.Hours.ToString();
            minutes.Text = interval.Minutes.ToString();
            seconds.Text = interval.Seconds.ToString();
        }
    }
Подскажите как переделать чтобы все время как год истек к дате2 добавить год!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2013, 12:54
Ответы с готовыми решениями:

Как поменять текст в Label по истечению времени?
Например: Первый текст: Загрузка данных... Потом текст меняется на: Подключение к базе данных...

Вывод строк в консоль по истечению определенного времени
В консоли должны по истечению определенного времени появляться строки. Можно небольшую вводную по использованию функций связаных с...

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

16
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
18.10.2013, 13:56
Mcr, чтобы добавить год используйте
C#
1
date2.AddYears(1)
Добавлено через 1 минуту
Mcr, оу, провтыкал. Sorry. Не проснулся ещё, видимо)

Добавлено через 5 минут
Цитата Сообщение от Mcr Посмотреть сообщение
interval = date2.AddYears(1) - date1; // вот здесь *я добавляю год но эта штука работает только один раз до 2014, а потом идет в минус, а должно прибавить год
Объясните подробнее, что нужно и как происходит сейчас?
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
18.10.2013, 15:37  [ТС]
Цитата Сообщение от Smems Посмотреть сообщение
Mcr, чтобы добавить год используйте
C#
1
date2.AddYears(1)
Добавлено через 1 минуту
Mcr, оу, провтыкал. Sorry. Не проснулся ещё, видимо)

Добавлено через 5 минут

Объясните подробнее, что нужно и как происходит сейчас?

нужно когда интервал будет равен 0 дней 0 часов 0 мин и 0 сек.
прибавить год к дате чтобы начался опять отсчет 365 дней 23 часа 59 мин 59 сек

Добавлено через 19 минут
а сейчас происходит так:
доходит до нужной даты (интервал становиться 0 дней 0 часов 0 мин и 0 сек) добавляется год date2.AddYears(1) и начинает опять считать а когда доходит опять до 0 дней 0 часов 0 мин и 0 сек начинает идти в минуса
0
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
18.10.2013, 16:58
Mcr, а как вы это проверяете? Я провёл тест: доходя до 0:00:00:00, добавляется год и пошёл отчёт обратный от 365 дней. Вывожу в цикле, используя Sleep(1000) - слишком долго. Не буду же я целый год ждать выполнения программы. Решил сделать, если у нас меньше чем 0:00:00:10 - то Sleep(1000), в ином случае - Sleep(1). Т.е. чтобы когда первый раз встретиться 0:00:00:00 - я увижу это и когда пойдёт от 365 дней обратно - должно пролететь быстро до момента, пока не станет 0:00:00:10 - тогда опять медленно и я смогу глянуть, что идёт после второго попадания на 0:00:00:00. НО! Я получаю StackOverflowException. Так вот вопрос: а как вы проверяете, что у вас потом уходит в минус?

Добавлено через 19 минут
Mcr, кажись понял.
1. Вам нужно присваивать AddYears(1) к date2. Иначе, если запустить программу и ждать выполнения более года (чего конечно не будет, но чисто теоретически), то когда добавится год к date2 и пойдёт обратный отсчёт, а потом во второй раз будет добавляться год - он уже добавится не к 2014 году, а к 2013 и будет всё тот же 2014.
Т.е.
C#
1
2
3
4
5
if (date2 < date1)
            {
                date2 = date2.AddYears(1);
                interval = date2 - date1;
.......................
2. Определение
C#
1
DateTime date2 = new DateTime(2013, 10, 18, 11, 40, 00);
нужно вынести за таймер и объявлять один раз, при старте таймера (либо при запуске приложения - там уже сами смотрите, как лучше), потому что иначе ваше AddYears(1) не имеет никакого смысла - всё-равно тут же date2 будет определенно как
C#
1
date2 = new DateTime(2013, 10, 18, 11, 40, 00);
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
18.10.2013, 17:32  [ТС]
Smems,
А можете на примере показать???? Чего то до меня не доходит... определил
C#
1
DateTime date2 = new DateTime(2013, 10, 18, 11, 40, 00);
в самом начале программы. а что дальше? у меня не получилось все равно выводит как и было
0
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
18.10.2013, 17:40
Mcr, покажите, где вы это пишите, потому что исходя из того примера кода, что указан вами в начале, вы присваиваете значение в timer1_tick.
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
18.10.2013, 17:45  [ТС]
Цитата Сообщение от Smems Посмотреть сообщение
Mcr, покажите, где вы это пишите, потому что исходя из того примера кода, что указан вами в начале, вы присваиваете значение в timer1_tick.
а теперь я его присвоил над таймером
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DateTime date2= new DateTime(2013, 10, 18, 16, 20, 00);
    protected void timer1_tick(object sender, EventArgs e)
    {
 
 
        DateTime date1 = new DateTime();
        date1 = DateTime.Now;
 
        
        TimeSpan interval;
            
 
 
            if(date2<date1){
               date2 = date2.AddYears(1);
                interval = date2 - date1;
                days.Text = interval.Days.ToString();
                hours.Text = interval.Hours.ToString();
                minutes.Text = interval.Minutes.ToString();
                seconds.Text = interval.Seconds.ToString();
            }
0
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
18.10.2013, 17:47
Mcr, прикрепите наверное свой проект, а то долго будем гадать...
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
18.10.2013, 17:54  [ТС]
только у меня проект это веб узел asp.net не сердитесь на меня, пожалуйста!!!
вот
Вложения
Тип файла: rar ProgrammerDay.rar (2.8 Кб, 3 просмотров)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2013, 09:25
Mcr, все проще нужно делать: Чего вы в итоге от этого кода хотите?
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
19.10.2013, 10:24  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Mcr, все проще нужно делать: Чего вы в итоге от этого кода хотите?
Чтобы безостановочно делался отсчет времени!
год только всего лишь раз прибавляется, а мне нужно чтобы год все время прибавлялся когда отсчет достигнет 0 дней 0 часов 0 мин 0 сек
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2013, 10:27
Mcr,
мне нужно чтобы год все время прибавлялся когда отсчет достигнет 0 дней 0 часов 0 мин 0 сек
зачем?
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
19.10.2013, 10:38  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Mcr, зачем?
чтобы видеть сколько осталось дней, часов, мин и сек, до такой-то даты!
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.10.2013, 10:39
C#
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
using System;
using System.Threading;
 
namespace ConsoleApplication25
{
    class Program
    {
        static void Main()
        {
            var r = new Random();
            DateTime dateTime = new DateTime(1993, 5, 18);
            while (true)
            {
                Console.WriteLine(DateDiff(dateTime,DateTime.Now));
                Thread.Sleep(r.Next(500, 1500));
            }
        }
 
        private static string DateDiff(DateTime dt1, DateTime dt2)
        {
            var diff = new DateTime((dt2 - dt1).Ticks);
            return string.Format("Разница между {0} и {1} составляет {2} лет, {3} месяцев, {4} дней, {5} часов, {6} минут, {7} секунд",
                              dt1, dt2, diff.Year, diff.Month, diff.Day, diff.Hour, diff.Minute, diff.Second);
        }
    }
}
0
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
21.10.2013, 11:32
Mcr, ошибка в том, что у вас в цикле каждый раз попадает в Page_Load и переменная date2 снова инициализируется, соответственно, строка
C#
1
date2 = date2.AddYears(1);
до фени.
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
21.10.2013, 12:25  [ТС]
Цитата Сообщение от Smems Посмотреть сообщение
Mcr, ошибка в том, что у вас в цикле каждый раз попадает в Page_Load и переменная date2 снова инициализируется, соответственно, строка
C#
1
date2 = date2.AddYears(1);
до фени.
а как сделать чтобы нормально все работало подскажите пожалуйста!!! Уже все обыскал и перепробовал(((
0
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
21.10.2013, 12:42
Mcr, я уже давно не имел дело с ASP и всё подзабыл, так что вряд ли помогу вам. Мне лично не совсем понятно, почему, если вынести инициализацию date2 за Page_Load - то в таймере всё-равно попадает на инициализацию. Наверное, после присвоения Label1.Text - страница обновляется и поэтому date2 снова будет равно начальному значению.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.10.2013, 12:42
Помогаю со студенческими работами здесь

По истечению времени выполнять действия
Всем привет!) Как сделать, чтобы по истечению 20 минут (или любого другого времени) выполнять какие либо действия? Например,...

Закрытие сайта по истечению времени
Приветствую вас друзья! Готовлю сайт для заказчика, доменное имя и хостинг будет его, хочу придумать &quot;защиту&quot; на случай...

Удаление строки из базы по истечению времени
Как сделать так что бы удалилась строка по истечению 24 ч или 1сутки база id|text| date| 1|Привет|2016-01-05 12:20:24| Нужно...

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

Как выключить триггер по истечению времени?
Есть триггер, который активирует &quot;GameObject monster&quot; когда в него заходит игрок. Хочу, что бы объект монстр появлялся на какое-то...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru