Календарь...
Как можно програмно составить календарь на 2005 год?(VB6)... Хотя бы зарисовки по поводу алгоритма...
Please Help!
Как можно програмно составить календарь на 2005 год?(VB6)... Хотя бы зарисовки по поводу алгоритма...
Смотря по тому, что именно надо.
Если что-то аналогичное стандартному системному календарю Windows (элемент "Дата и время" панели управления, вкладка "Дата и время", фрейм "Дата"), то просто: создать форму и разместить на ней элемент управления "Календарь". Его можно найти в списке дополнительных элементов управления для форм.
Чтобы видеть все даты всех месяцев одновременно можно, как вариант, "натаскать" на форму 12 таких элементов и соответствующим образом настроить каждый из них.
Если нужно нечто более сложное (или просто не нравиться стандартный "контрол"), то можно написать что-либо самому, пользуясь комплектом функций для работы с датой и временем. Например:
myDate = Date 'Полная текущая дата (день, месяц, год)
myDay = Day(Date) 'Текущее число
myMonth = Month(Date) 'Текущий месяц
myYear = Year(Date) 'Текущий год
'Кол-во дней в текущем месяце
numDays = DateSerial(Year(Date), Month(Date) + 1, 1) - _
DateSerial(Year(Date), Month(Date), 1)
и т.п.
Могут быть очень полезными функции: DatePart, DateValue, DateDiff, DateAdd.
Впрочем, повторюсь, все зависит от конкретики задачи.
Please Help!
Как можно програмно составить календарь на 2005 год?(VB6)... Хотя бы зарисовки по поводу алгоритма...
А я честно говоря подумал, что человек хочет "составить" последовательность дней недели, что зовется календарем, хотя зачем это?! :???: ....
Вообщем, люблю я такие краткие, конкретные вопросы :)
А я честно говоря подумал, что человек хочет "составить" последовательность дней недели, что зовется календарем, хотя зачем это?! :???: ....
Вообщем, люблю я такие краткие, конкретные вопросы :)
Возможно, конечно, и так, хотя речь идет о календаре на весь год.
Когда автор ореагирует, наверное, будет понятнее.
:) собственно мне надо просчитать по дням недели и числам любой месяц любого года...
Ты будешь смеяться 8), но все равно нифига не понятно
Есть у меня правда подозрения, что ты не знаешь, что переменные типа Date представляют из себя обычные числа (целая часть числа - это кол-во дней прошедших со 190.. кого-то года, уже не помню) и соотв. нет никаких проблем с вычислением интервалов и опредл. дней недели и т.д.
Например, если ты хочешь получить дату через 3 дня после имеющейся, то
Dim d as Date
d = Now()
d = d + 3
msgbox d
Если надо получить разницу между датами в чистом виде (без временной части), то DateDiff
Ну и т.д. вот все функции из модуля DateTime, с которыми можно сделать все что угодно - нажми F2 в редакторе, введи в поиске DateTime, увидишь в списке модуль - DateTime и всего его функции, справка по ним по F1.
:) собственно мне надо просчитать по дням недели и числам любой месяц любого года...
Ну, для совсем любого года стандартными функциями не получится, т.к. допустимый для многих из них диапазон: от 100 до 9999. Для работы за этими рамками уже надо придумывать что-то самому.
А для работы внутри их вот самый простецкий код на VBA для Excel:
Sub TestCalend()
Dim myDate, myMonth, myYear
Dim numDays As Integer
myMonth = 2 'Нужный месяц
myYear = 1200 'Нужный год
'Кол-во дней в заданном месяце
numDays = DateSerial(myYear, myMonth + 1, 1) - _
DateSerial(myYear, myMonth, 1)
'Формирование заголовка
Worksheets(1).Cells(1, 1).Value = _
MonthName(myMonth, False) & ", " & myYear & " г."
'Формирование "сетки" дней
For x = 1 To numDays
myDate = x & "/" & myMonth & "/" & myYear
Worksheets(1).Cells(x + 1, 1).Value = _
Format(myDate, "dd mmmm yyyy")
Worksheets(1).Cells(x + 1, 2).Value = _
WeekdayName(Weekday(myDate, vbMonday), True, vbMonday)
Next x
End Sub
Разумеется, значения переменных myMonth и myYear должны откуда-то "появляться". В примере они взяты "от фонаря".
Есть у меня правда подозрения, что ты не знаешь, что переменные типа Date представляют из себя обычные числа (целая часть числа - это кол-во дней прошедших со 190.. кого-то года, уже не помню)
Спасибо! теперь буду знать :}
Да, спасибо, код действительно помог... :)
Как-то не пришло сразу в голову, что Ваша задача может носить не бытовой или производственный характер, а, например, научный. Скажем, подобная задача возникает у историков и астрономов при ретроспективных расчетах для датирования тех или иных событий.
В этом случае обязательно надо учитывать следующее:
1. Функции даты и времени в VB (и его разновидностях) ориентированы на григорианский (так называемый новый) стиль, использовать который для ретроспективных расчетов за пределами 1901 года весьма нежелательно. Причина – неритмичность григорианского календаря в отношении определения високосных лет.
По старому стилю високосным будет всякий год, значение которого кратно 4. По новому – високосным не может быть год с двумя нолями на конце (типа 2000, 1900, 1800 и т.д.), если количество сотен в нем не кратно 4 (например, 1900 – 19 сотен, 1800 - 18, 1700 - 17 и т.д.). При этом числа 1900, 1800, 1700 кратны 4.
Таким образом, за каждые 400 лет между юлианским и григорианским календарями накапливается разница в 3 дня.
2. Ретроспективные расчеты за пределами 1901 года всегда лучше выполнять, используя старый стиль, а затем уже полученный результат можно преобразовать в новый.
Как-то не пришло сразу в голову, что Ваша задача может носить не бытовой или производственный характер, а, например, научный. Скажем, подобная задача возникает у историков и астрономов при ретроспективных расчетах для датирования тех или иных событий.
В этом случае обязательно надо учитывать следующее:
1. Функции даты и времени в VB (и его разновидностях) ориентированы на григорианский (так называемый новый) стиль, использовать который для ретроспективных расчетов за пределами 1901 года весьма нежелательно. Причина – неритмичность григорианского календаря в отношении определения високосных лет.
По старому стилю високосным будет всякий год, значение которого кратно 4. По новому – високосным не может быть год с двумя нолями на конце (типа 2000, 1900, 1800 и т.д.), если количество сотен в нем не кратно 4 (например, 1900 – 19 сотен, 1800 - 18, 1700 - 17 и т.д.). При этом числа 1900, 1800, 1700 кратны 4.
Таким образом, за каждые 400 лет между юлианским и григорианским календарями накапливается разница в 3 дня.
2. Ретроспективные расчеты за пределами 1901 года всегда лучше выполнять, используя старый стиль, а затем уже полученный результат можно преобразовать в новый.
Вообще-то это дистанционная олимпиада по информатике... :D
Большое спасибо, внесу в свою работу...