分享:GenericCalendar工具类

  在开发项目的过程中,“客户”提出了根据日期的迟早,加载最新的通知信息的需求。想了好多方法,最终编写了org.warnier.zhang.utils.GenericCalendar类满足客户需求,实现过程中参考了java.util.Calendar类的compareTo()方法;

  GenericCalendar类中最出彩之处在于计算距公元1年1月1日天数的方法getDaysOf(),代码如下:

 1     /**
 2      * 计算当前日期距公元1年1月1日的天数;
 3      * @param calendar
 4      * @return 当前日期距公元1年1月1日的天数;
 5      */
 6     private int getDaysOf(GenericCalendar calendar){
 7         int[][] days = {
 8                 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
 9                 {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
10         };
11
12         int result = calendar.currentDay;
13         for(int i = 1; i < calendar.currentYear; i ++){
14             result  = result + 365 + (((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) ? 1 : 0);
15         }
16         int leap = ((calendar.currentYear % 4 == 0 && calendar.currentYear % 100 != 0) || calendar.currentYear % 400 == 0) ? 1 : 0;
17         for(int j = 1; j < calendar.currentMonth; j ++){
18             result += days[leap][j];
19         }
20         return result;
21     }

  通过一个二维数组和闰年的判断标志leap来确定二月具体是28天还是29天。

  完整的代码如下:

 1 package org.warnier.zhang.utils;
 2
 3 import java.util.Calendar;
 4 import java.util.GregorianCalendar;
 5
 6 /**
 7  * 日历的工具类,主要实现两个日期比较的功能;
 8  * @author Warnier-zhang
 9  *
10  */
11 public class GenericCalendar{
12     public int currentYear;
13     public int currentMonth;
14     public int currentDay;
15
16     /**
17      * 根据当前日期的年,月,日初始化日历;
18      */
19     public GenericCalendar(){
20         Calendar calendar = new GregorianCalendar();
21         currentYear = calendar.YEAR;
22         currentMonth = calendar.MONTH;
23         currentDay = calendar.DAY_OF_MONTH;
24     }
25
26     /**
27      * 根据指定日期的年,月,日初始化日历;
28      * @param currentYear
29      * @param currentMonth
30      * @param currentDay
31      */
32     public GenericCalendar(int currentYear, int currentMonth, int currentDay){
33         this.currentYear = currentYear;
34         this.currentMonth = currentMonth;
35         this.currentDay = currentDay;
36     }
37
38     /**
39      * 根据日期的年,月,日,比较两个日期;
40      * @param anotherCalendar
41      * @return 比较当前日期是否比参照日期迟;返回 1,表示迟;返回 0,表示相同;返回 -1,表示早;
42      */
43     public int compareTo(GenericCalendar anotherCalendar){
44         return compareTo(getDaysOf(anotherCalendar));
45     }
46
47     /**
48      * 计算当前日期距公元1年1月1日的天数;
49      * @param calendar
50      * @return 当前日期距公元1年1月1日的天数;
51      */
52     private int getDaysOf(GenericCalendar calendar){
53         int[][] days = {
54                 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
55                 {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
56         };
57
58         int result = calendar.currentDay;
59         for(int i = 1; i < calendar.currentYear; i ++){
60             result  = result + 365 + (((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) ? 1 : 0);
61         }
62         int leap = ((calendar.currentYear % 4 == 0 && calendar.currentYear % 100 != 0) || calendar.currentYear % 400 == 0) ? 1 : 0;
63         for(int j = 1; j < calendar.currentMonth; j ++){
64             result += days[leap][j];
65         }
66         return result;
67     }
68
69     /**
70      * 根据距公元1年1月1日的天数来比较两个日期;
71      */
72     private int compareTo(int days){
73         int thisDays = getDaysOf(this);
74         return (thisDays > days) ? 1 : (thisDays == days) ? 0 : -1;
75     }
76
77 }
时间: 2024-11-06 12:40:14

分享:GenericCalendar工具类的相关文章

android分享应用工具类

/** * 分享应用. */ private void shareApk() { Intent intent = new Intent(); intent.setAction("android.intent.action.SEND"); intent.addCategory("android.intent.category.DEFAULT"); intent.setType("text/plain"); intent.putExtra(Inten

轻松把玩HttpClient之封装HttpClient工具类(三),插件式配置Header

上篇文章介绍了插件式配置HttpClient,本文将介绍插件式配置Header. 为什么要配置header在前面已经提到了,还里再简单说一下,要使用HttpClient模拟请求,去访问各种接口或者网站资源,都有可能有各种限制,比如说java客户端模拟访问csdn博客,就必须设置User-Agent,否则就报错了.还有各种其他情况,必须的设置一些特定的Header,才能请求成功,或者才能不出问题. 好了就说这么多,本次还是采用构造者模式的级联调用方式,来完成该工具类.在该工具类中,为所有常用的Ht

郑州尚学堂:php实现网页缓存的工具类分享

PHP是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Java.Perl以及PHP自创的语法.它可以比CGI或者Perl更快速地执行动态网页.今天给大家分享php实现网页缓存的工具类的代码及使用方法,非常的实用,希望可以对有需求的小伙伴带来帮助. php程序在抵抗大流量访问的时候动态网站往往都是难以招架,所以要引入缓存机制,一般情况下有两种类型缓存 一.文件缓存 二.数据查询结果缓存,使用内存来实现高速

分享万能java字符串编码转换工具类

代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ publ

JAVA对象任意深度克隆clone工具类分享

原文:JAVA对象任意深度克隆clone工具类分享 源代码下载地址:http://www.zuidaima.com/share/1550463408114688.htm package com.zuidaima.n_app.util; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import jav

Joda开源扩展插件,神马日期工具类都是浮云!!Demo下载运行即可查看,注释齐全,真心好用,分享大家。

原文:Joda开源扩展插件,神马日期工具类都是浮云!!Demo下载运行即可查看,注释齐全,真心好用,分享大家. 源代码下载地址:http://www.zuidaima.com/share/1550463610604544.htm 真心好用,分享大家.

分享一个用OnGUI在手机上打印调试信息的工具类

游戏发布到手机上调试的时候有时候会需要在屏幕上打印一些信息,我写了一个小工具类,分享出来,用的是OnGUI,很简单,直接上代码了 using UnityEngine; using System.Collections; using System.Collections.Generic; public class OnGUIDebug : MonoBehaviour { public static OnGUIDebug Instance; public int FontSize = 40; pub

java时间比较工具类分享

开发中经常需要比较时间,写了一个简易的工具类,分享一下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

工具类小程序分享

闲时自己做的工具类小程序分享尝鲜,包含举例(铁路12306火车正晚点查询和检票口查询.记事本.小游戏.视频播放模拟器等等......) 1.小程序包含可移动菜单.swiper轮播推荐.热门推荐.实用工具类.休闲益智和我的模块. 2.欢迎小伙伴们尝鲜,欢迎小伙伴的意见和建议,可以通过本人的小程序或者该帖子联系我. 以下是小程序入口: swiper轮播推荐效果图: 工具类效果图: 休闲益智类效果图: 以下:提供两个快捷访问铁路12306查询的小程序入口: 原文地址:https://www.cnblo