自定义标记或代码,用于确定特定日期是否为假日

时间:2015-12-18 15:55:30

标签: coldfusion custom-tags

我需要弄清楚特定日期是否属于假日,例如阵亡将士纪念日,劳动节,感恩节,复活节等。但是,这些假期根据一周中的一周或一周中的某一天浮动。我确信有代码可以做到这一点,所以我不想重新发明轮子。

具体来说,如果事件发生在假日,我会知道某事发生的日期,并希望添加有关该日期的信息,或者做额外的事情(例如增加额外的工资)。这样的事情,但对于每个联邦假期:

private int storeYear = 0;
private int storeMonth = 0;
private int storeDay = 0;

private void  function openPicker(){
   final TextView txtDate  = findViewById(R.id.yourid);
  final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog dpd = new DatePickerDialog(this,
            new DatePickerDialog.OnDateSetListener() {

                public void onDateSet(DatePicker view, int year,
                        int monthOfYear, int dayOfMonth) {

                   //TextView txtDate = null;
                    txtDate.setText(dayOfMonth + "-" + (monthOfYear + 1)
                            + "-" + year);
                    storeYear = year;storeMonth = monthOfYear;storeDay = dayOfMonth;

    message("message", "Mensaje", mYear + "/" + mMonth + "/"
            + mDay, this, context);
                }

                public void onDateSet1(DatePicker view, int year,
                        int monthOfYear, int dayOfMonth) { // TODO
                                                            // Auto-generated
                                                            // method stub

                }
            }, mYear, mMonth, mDay);
    dpd.show();

}

另一方面,有没有人知道CF自定义标签库的工作URL,还是他们杀了?

1 个答案:

答案 0 :(得分:4)

您可以访问&缓存Google Calendar US Holiday Feed。您需要注册免费的API密钥。 “FullCalendar”有关于建立日历帐户以供w / JS使用的说明,但是一旦配置完就可以使用CF来使用JSON。

http://fullcalendar.io/docs/google_calendar/

使用浏览器开发人员F12工具查看此页面上的源和服务器JSON响应:

http://fullcalendar.io/js/fullcalendar-2.5.0/demos/gcal.html

您将使用的URL看起来像这样(但使用您自己的API密钥):

https://www.googleapis.com/calendar/v3/calendars/usa__en@holiday.calendar.google.com/events?key=AIzaSyDcnW6WejpTOCffshGDDb4neIrXVUA1EAE

您获得的JSON响应将包含一个“项目”数组,其中包含假日信息和ISO8601格式的日期。

"items": [
  {
   "kind": "calendar#event",
   "etag": "\"2778476758000000\"",
   "id": "20140101_60o30dr46oo30c1g60o30dr4ck",
   "status": "confirmed",
   "htmlLink": "https://calendar.google.com/calendar/event?eid=MjAxNDAxMDFfNjBvMzBkcjQ2b28zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
   "created": "2014-01-09T03:32:59.000Z",
   "updated": "2014-01-09T03:32:59.000Z",
   "summary": "New Year's Day",
   "creator": {
    "email": "usa__en@holiday.calendar.google.com",
    "displayName": "Holidays in United States",
    "self": true
   },
   "organizer": {
    "email": "usa__en@holiday.calendar.google.com",
    "displayName": "Holidays in United States",
    "self": true
   },
   "start": {
    "date": "2014-01-01"
   },
   "end": {
    "date": "2014-01-02"
   },
   "transparency": "transparent",
   "visibility": "public",
   "iCalUID": "20140101_60o30dr46oo30c1g60o30dr4ck@google.com",
   "sequence": 0
  }
]

我建议保存API响应数据(这样您就可以在本地重用它而不必依赖远程API)并使用ISO8601日期作为键(yyyy-MM-DD)生成结构,并使值为数组假日名字。您可能希望将此扩展为表示是否为联邦“付费”假期,因为我不相信Google Calendar API(或任何假日日期库)会为您确定。

Holidays = {
   "2015-12-31" = ["New Year's Eve"],
   "2016-01-01" = ["New Year's Day"]
}

然后使用类似的东西作为你的逻辑:

holidayNames = '';
if (StructKeyExists(Holidays, DateFormat(theDate, "yyyy-MM-DD"))){
    holidayNames = ArrayToList(Holidays[DateFormat(theDate, "yyyy-MM-DD")]);
}

更新在Google搜索基于ColdFusion的库时,我意识到我在一年前写了一个GetGoogleHolidays UDF。 (UDF使用Google Calendar API获取美国假日JSON数据,生成一个包含YYYYMMDD键的结构,其中包含一系列假日名称并将其缓存24小时。)

http://gamesover2600.tumblr.com/post/104768724954/fetch-holiday-dates-from-google-calendar-api-using