Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Календарь...

3.0K
11 января 2005 года
ragerage
43 / / 02.12.2004
Please Help!
Как можно програмно составить календарь на 2005 год?(VB6)... Хотя бы зарисовки по поводу алгоритма...
405
12 января 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by ragerage
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.
Впрочем, повторюсь, все зависит от конкретики задачи.

258
12 января 2005 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by ragerage
Please Help!
Как можно програмно составить календарь на 2005 год?(VB6)... Хотя бы зарисовки по поводу алгоритма...



А я честно говоря подумал, что человек хочет "составить" последовательность дней недели, что зовется календарем, хотя зачем это?! :???: ....

Вообщем, люблю я такие краткие, конкретные вопросы :)

405
12 января 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by SergeySV


А я честно говоря подумал, что человек хочет "составить" последовательность дней недели, что зовется календарем, хотя зачем это?! :???: ....

Вообщем, люблю я такие краткие, конкретные вопросы :)



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

3.0K
12 января 2005 года
ragerage
43 / / 02.12.2004
:) собственно мне надо просчитать по дням недели и числам любой месяц любого года...
258
13 января 2005 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by ragerage
:) собственно мне надо просчитать по дням недели и числам любой месяц любого года...



Ты будешь смеяться 8), но все равно нифига не понятно

Есть у меня правда подозрения, что ты не знаешь, что переменные типа Date представляют из себя обычные числа (целая часть числа - это кол-во дней прошедших со 190.. кого-то года, уже не помню) и соотв. нет никаких проблем с вычислением интервалов и опредл. дней недели и т.д.

Например, если ты хочешь получить дату через 3 дня после имеющейся, то

Dim d as Date

d = Now()
d = d + 3
msgbox d

Если надо получить разницу между датами в чистом виде (без временной части), то DateDiff

Ну и т.д. вот все функции из модуля DateTime, с которыми можно сделать все что угодно - нажми F2 в редакторе, введи в поиске DateTime, увидишь в списке модуль - DateTime и всего его функции, справка по ним по F1.

405
13 января 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by ragerage
:) собственно мне надо просчитать по дням недели и числам любой месяц любого года...



Ну, для совсем любого года стандартными функциями не получится, т.к. допустимый для многих из них диапазон: от 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 должны откуда-то "появляться". В примере они взяты "от фонаря".

3.0K
13 января 2005 года
ragerage
43 / / 02.12.2004
Цитата:
Originally posted by SergeySV

Есть у меня правда подозрения, что ты не знаешь, что переменные типа Date представляют из себя обычные числа (целая часть числа - это кол-во дней прошедших со 190.. кого-то года, уже не помню)


Спасибо! теперь буду знать :}

3.0K
13 января 2005 года
ragerage
43 / / 02.12.2004
Да, спасибо, код действительно помог... :)
405
14 января 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by ragerage
Да, спасибо, код действительно помог... :)



Как-то не пришло сразу в голову, что Ваша задача может носить не бытовой или производственный характер, а, например, научный. Скажем, подобная задача возникает у историков и астрономов при ретроспективных расчетах для датирования тех или иных событий.
В этом случае обязательно надо учитывать следующее:
1. Функции даты и времени в VB (и его разновидностях) ориентированы на григорианский (так называемый новый) стиль, использовать который для ретроспективных расчетов за пределами 1901 года весьма нежелательно. Причина – неритмичность григорианского календаря в отношении определения високосных лет.
По старому стилю високосным будет всякий год, значение которого кратно 4. По новому – високосным не может быть год с двумя нолями на конце (типа 2000, 1900, 1800 и т.д.), если количество сотен в нем не кратно 4 (например, 1900 – 19 сотен, 1800 - 18, 1700 - 17 и т.д.). При этом числа 1900, 1800, 1700 кратны 4.
Таким образом, за каждые 400 лет между юлианским и григорианским календарями накапливается разница в 3 дня.
2. Ретроспективные расчеты за пределами 1901 года всегда лучше выполнять, используя старый стиль, а затем уже полученный результат можно преобразовать в новый.

3.0K
16 января 2005 года
ragerage
43 / / 02.12.2004
Цитата:
Originally posted by Dmitrii


Как-то не пришло сразу в голову, что Ваша задача может носить не бытовой или производственный характер, а, например, научный. Скажем, подобная задача возникает у историков и астрономов при ретроспективных расчетах для датирования тех или иных событий.
В этом случае обязательно надо учитывать следующее:
1. Функции даты и времени в VB (и его разновидностях) ориентированы на григорианский (так называемый новый) стиль, использовать который для ретроспективных расчетов за пределами 1901 года весьма нежелательно. Причина – неритмичность григорианского календаря в отношении определения високосных лет.
По старому стилю високосным будет всякий год, значение которого кратно 4. По новому – високосным не может быть год с двумя нолями на конце (типа 2000, 1900, 1800 и т.д.), если количество сотен в нем не кратно 4 (например, 1900 – 19 сотен, 1800 - 18, 1700 - 17 и т.д.). При этом числа 1900, 1800, 1700 кратны 4.
Таким образом, за каждые 400 лет между юлианским и григорианским календарями накапливается разница в 3 дня.
2. Ретроспективные расчеты за пределами 1901 года всегда лучше выполнять, используя старый стиль, а затем уже полученный результат можно преобразовать в новый.



Вообще-то это дистанционная олимпиада по информатике... :D
Большое спасибо, внесу в свою работу...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог