Содержание | Последнее обновление: 14.02.2004 |
Дата и время( TDateTime ) - общие вопросы Автор(ы): KAV, trainerИсходная ссылка: - - - TDateTime datetime1 = ...; TDateTime datetime2 = ...; double difference = (double)( datetime2 - datetime1 );При этом получившееся значение будет представлять точное значение с учетом дней, часов, минут и секунд. Например, значение 3.25 - это три дня и еще 0.25 дня( т.е. 6 часов ) Как узнать текущие дату и/или время? Нет ничего проще: TDateTime CurrentDate = Date(); // это текущая дата TDateTime CurrentTime = Time(); // это текущее время TDateTime CurrentDateTime = Now(); // это текущие дата и время Как сдвинуть дату на заданный промежуток? TDateTime datetime = ...; datetime += 1.0 / 24; // сдвигаем на час вперед datetime -= 1.0; // сдвигам на день назад datetime += 7.0; // сдвигаем на неделю вперед datetime = IncMonth( datetime, -1 ); // сдвигаем на месяц назад Как определить день недели? TDateTime datetime = ...; int day_of_week = ( datetime.DayOfWeek() + 5 ) % 7; // считаем с понедельника и с нуля Как определить номер недели в году? Следует иметь в виду, что первая неделя в году может быть неполной. int week_num; Word year, month, day; TDateTime dt = ...; // "подопытная" дата dt.DecodeDate(&year,&month,&day); // раскладываем нашу дату на составляющие TDateTime _1_jan(year,1,1); // 1-е января того года, которому соответствует дата int _1_jan_day_of_week = (_1_jan.DayOfWeek()+5)%7; // день недели 1-го января week_num = (int)(dt-TDateTime(year,1,1)+_1_jan_day_of_week)/7; // искомый номер недели(с 0) Как узнать, сколько дней в месяце? Количество дней в месяце хранится в глобальном массиве MonthDays, получить значение можно так: MonthDays[IsLeapYear(номер_года)][номер_месяца] Как изменить один из компонентов TDateTime, не затрагивая другой? TDateTime datetime1 = ...; TDateTime datetime2 = ...; ReplaceDate(datetime1,datetime2); // datetime1 теперь содержит ту же дату, что и datetime2 // но время осталось прежним ReplaceTime(datetime2,datetime1); // а теперь datetime2 содержит то же время, что и datetime1 // но дата осталась прежней Как определить, является ли год високосным? Для этого надо использовать функцию IsLeapYear. Например, следующий код покажет окно с текстом о том, является ли год високосным или нет: int year = 2100; // тут какой надо год ShowMessage( IntToStr(year) + " год - " + ((IsLeapYear(year)) ? "" : "не ") + "високосный" );Как видно, функция IsLeapYear принимает параметр - год и возвращает true, если он високосный и false в противном случае. P.S. Троеточие в примерах заменяет некоторое выражение, позволяющее записать в объект корректное значение. |