Как я определяю государственный праздник в SQL-сервере?

18
задан Chase Sandmann 27 February 2019 в 17:49
поделиться

16 ответов

hollydays общественности Google Календаря, Возможно, Вы могли retrive Ваши данные страны/региона с веб-сервисом Google Календаря.

0
ответ дан 30 November 2019 в 06:20
поделиться

Добавить, что другие люди уже сказали, поместив Ваше собственное в таблицу, - единственный реальный способ сделать ее. Классическим примером является дополнительный выходной день для золотого юбилея Королевы. Об этом только объявили несколько лет заранее, и не было никакого способа, которым у Вас мог быть он пятьдесят лет заранее.

из-за этого много коммерческих услуг существуют для обеспечения этих данных надежным способом. Каждый GoodBusinessDay.com , но у меня нет опыта с ним.

0
ответ дан 30 November 2019 в 06:20
поделиться

Если это - просто Англия, то можно разработать их для себя! Необходимо будет получить надежный алгоритм для определения Пасхи, но иначе я сказал бы, что Вы могли выполнить в нем менее чем час.

, Но Вы имеете в виду просто Англию или Великобританию? Поскольку Шотландия имеет различные праздники (Рождество, Сочельник и День St Andrew's) и Северная Ирландия, Уэльс, и скорее всего остров Мэн и Нормандские острова должны также быть проданы по-другому.

, Как отмечено в другом месте, после того как Ваш объем становится более широким затем, это еще более сложно. Существуют локальные праздники, неполные рабочие дни, дни, когда банки открыты, но фондовые биржи не, все виды ужасов.

, Если Вы действительно не можете управлять праздниками сами и не иметь пользователей, которым можно дать ответственность, затем я предложил бы возвращаться к Ваш, "не может работать на государственном празднике" ограничение и поиск путей, которыми это могло бы быть удалено...

1
ответ дан 30 November 2019 в 06:20
поделиться

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

0
ответ дан 30 November 2019 в 06:20
поделиться

Вы испытываете необходимость для поддержания праздничной таблицы для этого. Для надлежащей интернационализации даже необходимо поддержать, какие дни являются днями выходных дней для этого с тех пор даже, которое не универсально. Аналогично, Вы, возможно, должны были бы поддержать праздники локалью, таким образом, Ваша программа знает, что у пользователей в Лондоне есть выходной, но пользователи в Турции не делают.

Это должно абсолютно настраиваться пользователем. Для всего Вы знаете, день рождения владельца компании мог бы быть "стандартным" выходным. Попытайтесь найти что праздник в сети.

Наконец, Вы не хотите хранить ценность 50 лет праздничных данных. Это только будет неточно и потенциально замедлит весь Ваш код.

2
ответ дан 30 November 2019 в 06:20
поделиться

А-а-а, праздничные календари. Отрава любой жизни программиста инвестиционного банка. Нет никакого способа сделать его кроме ведения Вашего собственного списка, я боюсь!

2
ответ дан 30 November 2019 в 06:20
поделиться

Государственные праздники редко доступны в течение следующих 50 лет. В некоторых странах они известны в течение следующих нескольких лет в некоторых странах нет. Они также варьируются по состояниям и даже городам.

4
ответ дан 30 November 2019 в 06:20
поделиться

Существует веб-сервис, доступный для этого -

http://www.holidaywebservice.com/Holidays/servicesAvailable_HolidayService.aspx

4
ответ дан 30 November 2019 в 06:20
поделиться

Разве государственный праздник не очень зависим из локали?

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

7
ответ дан 30 November 2019 в 06:20
поделиться

Насколько я знаю, что нет никакого 'официального' источника, и это действительно очень зависит от локали. Необходимо было бы управлять ими вручную. Хороший источник, кажется:

http://en.wikipedia.org/wiki/List_of_holidays_by_country

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

8
ответ дан 30 November 2019 в 06:20
поделиться

В наших приложениях у нас есть он часть пользовательской конфигурации. Существует место для пользователей для установки то, для чего они рассматривают общественность/выходные дни настолько далеко в будущее, как они хотят. Для простоты использования существует способность скопировать их по дате с предыдущих лет. Это также позволяет им устанавливать 'пользовательскую' общественность holdays, возможно, день, который компания рассматривает как праздник, но не национально официальна...

Programatically, однако, нет абсолютно никаких предположений вообще. Это - эффективно просто сохраняемая таблица пользователя дат.

(Это включает Великобританию, потому что как указано выше некоторые праздники варьируются и не установлены в камне, и иногда существуют специальные одноразовые дни.)

5
ответ дан 30 November 2019 в 06:20
поделиться

Found another service for worldwide public holidays, allegedly used by calendar publishers:

http://www.qppstudio.net/index.htm

0
ответ дан 30 November 2019 в 06:20
поделиться

Если это поможет, у меня есть текстовый файл, в котором перечислены правила расчета банковских праздников, определенные для всех крупных и второстепенных финансовых центров. Обычно это определяется по бизнес-центру, как в Лондоне, Нью-Йорке, Франкфурте и т. Д., И т. Д., А не по стране. В качестве примера приведены правила и объяснения для Лондона и некоторых других. Если кто-то захочет получить все, дайте мне знать. Этот участок должен проработать самое раннее с 1990 по 2030 год. Очевидно, что никаких новых праздников не будет объявлено после того, как будут собраны файлы (думаю, в 2006 году).

/*
 *   This file describes holiday calendars in the following way:
 *  1. The "n"th "dow" in the month "m", means the 3rd Wednesday in August = "ALWAYS,3,WED,AUG"
 *  2. The last etc "dow" in month "m", e.g. the last Monday in June = "LAST,MON,JUN"
 *  3. A set date which if on a Sat or Sun is taken on the Monday, eg 13th Aug. = "FWDFROM,13,AUG"
 *  4. A set date which if on a Sat is taken on Fri, if Sun on the Mon = "CLOSESTTO,13,AUG"
 *  5. A set date which, if on a Sat is unchanged, but if a Sun is taken on the Mon = "FWDFROMSUN,13,AUG"
 *  6. A set date which is unchanged if it happens to be on a weekend = "REMAINS,13,AUG"
 *  7. The first day on or after day "x" in month "m" e.g. 1st Monday on or after 16th Jan = "FIRSTAFTER,16,MON,JAN"
 *  8. A holiday which is a set number of days relative to Easter Sunday, e.g Easter Monday = "EASTER,1"
 *  9. A holiday on one specified date only. e.g. 13th Aug 1997 = "ONEOFF,13,AUG,1997"
 *  10.A specific date which has been added but is not a holiday and must be removed. = "REMOVE,13,AUG,1997"
 *  Note REMOVE only works on a date which is already in the calendar: you cannot remove a date which is yet to be added.
 *   If there is any text after the definition of the holiday it will appear in the date calendar description,
 *   e.g. you can have "FWDFROM,25,DEC,Christmas Day", if you wish.
 */

LON: HolidayCalendar {  
 Config: String {
     FWDFROM,1,JAN,New Year's Day;
     EASTER,-2,Good Friday;
     EASTER,1,Easter Monday;
     ALWAYS,1,MON,MAY,Early May Bank Holiday;
     LAST,MON,MAY,Spring Bank Holiday;
     REMOVE,27,MAY,2002,Spring Bank Holiday;
     ONEOFF,3,JUN,2002,Spring Bank Holiday;
     ONEOFF,4,JUN,2002,Spring Bank Holiday;
     LAST,MON,AUG,Summer Bank Holiday;
     FWDFROM,25,DEC,Christmas;
     FWDFROM,26,DEC,Boxing Day;
     ONEOFF,31,DEC,1999,Millenium;
 }
 EndDate: 31-Dec-2030;
 Name: London;
 StartDate: 01-Jan-1990;
 Weekend: SAT,SUN,;
}

HKG: HolidayCalendar {  
 Config: String {   
     FWDFROM,1,JAN,New Year's Day;
     ONEOFF,16,FEB,1999,Chinese New Year;   
     ONEOFF,17,FEB,1999,Chinese New Year;   
     ONEOFF,18,FEB,1999,Chinese New Year;   
     FWDFROM,5,FEB,2000,Chinese New Year;   
     FWDFROM,6,FEB,2000,Chinese New Year;   
     FWDFROM,7,FEB,2000,Chinese New Year;   
     CLOSESTTO,5,APR,Ching Ming;    
     EASTER,-2,Good Friday; 
     EASTER,1,Easter Monday;    
     FWDFROM,1,MAY,Labour Day;  
     ONEOFF,18,JUN,1999,Dragon Boat Festival;   
     FWDFROM,1,JUL,SAR Establishment Day;   
     FWDFROM,1,OCT,National Day;
     FWDFROM,2,OCT,National Day;
     ONEOFF,25,SEP,1999,Mid Autumn Festival;
     ONEOFF,17,OCT,1999,Chung Yeung;
     FWDFROM,25,DEC,Christmas;
     FWDFROM,26,DEC,Boxing Day;
     ONEOFF,4,MAY,1998,May bank holiday;
     ONEOFF,25,MAY,1998,May bank holiday;
     ONEOFF,3,MAY,1999,May bank holiday;
     ONEOFF,31,MAY,1999,May bank holiday;
     ONEOFF,1,JUL,1997;
     ONEOFF,2,JUL,1997;
 }
 EndDate: 31-Dec-2030;
 Name: Hong Kong;
 StartDate: 01-Jan-1990;
 Weekend: SAT,SUN,;
}

MIL: HolidayCalendar {
 Config: String {
     FWDFROM,1,JAN,New Year's Day;
     REMAINS,6,JAN,Epiphany;
     REMAINS,25,APR,Liberation Day;
     REMAINS,1,MAY,May Day;
     REMAINS,15,AUG,Assumption;
     REMAINS,1,NOV,All Saint's;
     REMAINS,8,DEC,Immaculate Conception;
     EASTER,1,Easter Monday;
     FWDFROM,25,DEC,Christmas;
     FWDFROM,26,DEC,Boxing Day;
 }
 EndDate: 31-Dec-2030;
 Name: Milan;
 StartDate: 01-Jan-1990;
 Weekend: SAT,SUN,;
}

FFT: HolidayCalendar {
 Config: String {
     REMAINS,1,JAN,New Year's Day;
     EASTER,-2,Good Friday;
     EASTER,1,Easter Monday;
     REMAINS,1,MAY,Labour Day;
     EASTER,39,Ascension Day;
     EASTER,50,Whit Monday;
     EASTER,60,Corpus Christi;
     REMAINS,3,OCT,Day of German Unity;
     REMAINS,24,DEC,Christmas Eve;
     REMAINS,25,DEC,Christmas Day;
     REMAINS,26,DEC,Boxing Day;
 }
 EndDate: 31-Dec-2030;
 Name: Frankfurt;
 StartDate: 01-Jan-1990;
 Weekend: SAT,SUN,;
}

ZUR: HolidayCalendar {
 Config: String {
     REMAINS,1,JAN,New Year's Day;
     REMAINS,2,JAN,New Year's Holiday;
     EASTER,-2,Good Friday;
     EASTER,1,Easter Monday;
     EASTER,39,Ascension Day;
     EASTER,50,Whit Monday;
     REMAINS,1,AUG,August Bank Holiday;
     REMAINS,1,MAY, LABOUR DAY;
     REMAINS,25,DEC,Christmas;
     REMAINS,26,DEC,Boxing Day;
 }
 EndDate: 31-Dec-2030;
 Name: Zurich;
 StartDate: 01-Jan-1990;
 Weekend: SAT,SUN,;
}

NYK: HolidayCalendar {
 Config: String {
     REMAINS,1,JAN,New Year's Day;
     ALWAYS,3,MON,JAN,Martin Luther King;
     ALWAYS,3,MON,FEB,President's Day;
     LAST,MON,MAY,Memorial Day;
     CLOSESTTO,4,JUL,Independence Day;
     ALWAYS,1,MON,SEP,Labor Day;
     ALWAYS,2,MON,OCT,Columbus Day;
     REMAINS,11,NOV,Veteran's Day;
     ALWAYS,4,THU,NOV,Thanksgiving;
     FWDFROMSUN,25,DEC,Christmas Day;
     ONEOFF,12,NOV,2001,Veteran's Day;
 }
 EndDate: 31-Dec-2030;
 Name: New York;
 StartDate: 01-Jan-1990;
 Weekend: SAT,SUN,;
}
0
ответ дан 30 November 2019 в 06:20
поделиться

Этот алгоритм может уменьшить количество ручной настройки в странах, где отмечаются христианские праздники. Преобразование в C # должно быть тривиальным:

http://en.wikipedia.org/wiki/Computus#Anonymous_Gregorian_algorithm

0
ответ дан 30 November 2019 в 06:20
поделиться

Финансовые учреждения будут подписываться на службы, которые предоставляют периодические обновления банковских календарей для различных регионов.

Обратите внимание, что между банковскими праздниками и обычными праздниками часто бывает разница. Примером этого в Соединенных Штатах является празднование Дня независимости, когда федеральное правительство признало праздник 3 июля, но Федеральный резервный банк Нью-Йорка был открыт.

Федеральные праздники в США, 2009 год

Выходные дни в Федеральном резервном банке США, 2009 год.

0
ответ дан 30 November 2019 в 06:20
поделиться

Я просто собираю информацию через Интернет, и у меня есть этот простой способ рассчитать праздничные дни в США.


Выходные дни в США

===========================

DECLARE @Year char(4)
, @Date datetime
, @Holiday datetime

SET @Year = 2010

---- New Years Day
SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-01-01' ) 
IF DATENAME( dw, @Date ) = 'Saturday'
    SET @Date=@Date-1
ELSE IF DATENAME( dw, @Date ) = 'Sunday'
    SET @Date=@Date+1
SELECT @Date [New Years Day], DATENAME( dw, @Date ) [DayOfWeek]

---- Martin L King's Birthday ( 3rd Monday in January )
SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-01-01' ) 
SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 18-datepart( day, @Date ), @Date ) ), 0 ) -- 3rd Monday of the Month
SELECT @Holiday [Martin L King's Birthday], DATENAME( dw, @Holiday ) [DayOfWeek]

---- President’s Day ( 3rd Monday in February )
SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-02-01' ) 
SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 18-datepart( day, @Date ), @Date ) ), 0 ) -- 3rd Monday of the Month
SELECT @Holiday [President’s Day], DATENAME( dw, @Holiday ) [DayOfWeek]

---- Memorial Day ( Last Monday in May )
SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-05-01' ) 
SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 30-datepart( day, @Date ), @Date ) ), 0 ) -- 5th Monday of the Month
SELECT @Holiday [Memorial Day], DATENAME( dw, @Holiday ) [DayOfWeek]

---- Independence Day ( July 4 )
SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-07-04' ) 
IF DATENAME( dw, @Date ) = 'Saturday'
    SET @Date=@Date-1
ELSE IF DATENAME( dw, @Date ) = 'Sunday'
    SET @Date=@Date+1
SELECT @Date [Independence Day], DATENAME( dw, @Date ) [DayOfWeek]

---- Labor Day ( 1st Monday in September )
SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-09-01' ) 
SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 6-datepart( day, @Date ), @Date ) ), 0 ) -- 1st Monday of the Month
SELECT @Holiday [Labor Day], DATENAME( dw, @Holiday ) [DayOfWeek]

---- Columbus Day ( 2nd Monday in October )
SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-10-01' ) 
SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 12-datepart( day, @Date ), @Date ) ), 0 ) -- 2nd Monday of the Month
SELECT @Holiday [Columbus Day], DATENAME( dw, @Holiday ) [DayOfWeek]

---- Veteran’s Day ( November 11 )
SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-11-11' ) 
IF DATENAME( dw, @Date ) = 'Saturday'
    SET @Date=@Date-1
ELSE IF DATENAME( dw, @Date ) = 'Sunday'
    SET @Date=@Date+1
SELECT @Date [Veteran’s Day], DATENAME( dw, @Date ) [DayOfWeek]

---- Thanksgiving Day ( 4th Thursday in November )
SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-11-04' ) 
SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 22-datepart( day, @Date ), @Date ) ), 0 )+3 -- 4th Thursday of the Month
SELECT @Holiday [Thanksgiving Day], DATENAME( dw, @Holiday ) [DayOfWeek]

---- Christmas Day ( December 25 )
SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-12-25' ) 
IF DATENAME( dw, @Date ) = 'Saturday'
    SET @Date=@Date-1
ELSE IF DATENAME( dw, @Date ) = 'Sunday'
    SET @Date=@Date+1
SELECT @Date [Christmas Day], DATENAME( dw, @Date ) [DayOfWeek]

---- New Years Eve Day
SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-12-31' ) 
IF DATENAME( dw, @Date ) = 'Saturday'
    SET @Date=@Date-1
ELSE IF DATENAME( dw, @Date ) = 'Sunday'
    SET @Date=@Date+1
SELECT @Date [New Years Day], DATENAME( dw, @Date ) [DayOfWeek]
13
ответ дан 30 November 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: