JAVA日期时间的计算

别妄想泡我
911次浏览
2021年02月20日 06:24
最佳经验
本文由作者推荐

-

2021年2月20日发(作者:什么是爱一个人)



JAVA


日期时间的计算


< p>
最近,手头有不少项目,其中就有一个类似公文流转的项目,其中有一个


模 块是任务的制定,而在任务的类型中有一个循环任务,就是用户输入任务的


开始日期、结 束日期,还需要输入一个周期数,比如每周的星期几、每月的多


少号等,这里面就牵扯到


JAVA


日期时间的计算,从网上收集了一下,整理下


来,供大家参考


^_^


Java


语言的


Calendar



GregorianCalendar (


日历


),Date(


日期


),



D ateFormat(


日期格式


)


组成 了


Java


标准的一个基本但是非常重要的部分


.


日期是


商业逻辑计算一个关键的部分


.


所有的开发者都应该能够计算未来的日期


,


定制日


期的显示格式


,


并将文本数据解析成日期对象。学习日期


,


日期格式

< p>
,


日期的解析和


日期的计算。


我们将讨论下面的类


:


1


、具体类


(


和抽象类相对

< br>)


2


、抽象类


rmat


和它的一个具体子



,DateFormat


3




抽象类< /p>


ar


和它的一个具体子



,ianCalendar


具体类可以被实例化


,


但是抽象类却不能


.


你首先必


须实现抽象类的一个具体子类


.



及其格式化



Date


类从


Java


开发包


(JDK)



1.


就 开始进化


,


当时它只包含了几个取得或者设置一个日期数据的各 个部


分的方法


,


比如说月


,



,


和年


.


这些方法现在遭到了批评并且已经被转移到了


Cal endar


类里去了


,


我们将在本文中 进一步讨论它


.


这种改进旨在更好的处理日期

< br>数据的国际化格式


.


就象在


JD K




1



/


10





1.


中一样


, Date


类实际上只是一个包裹类


,


它包含的是一个长整型数 据


,



示的是从


GMT(


格林尼治标准时间


)1970



, 1



1



00:00:00


这一刻之前或者是


之后经历的毫秒数


.


1.


1.


创建


va


统计从



1970


1



1


日起的毫秒的数量表示日期。也就是说,例如,



1970



1



2


日,是在


1



1


日后的


86



400



000


毫秒。同样的,



1969



12



31


日是在



1970



1



1


日前


86



400



000


毫 秒。


Java



Date


类使用


long


类型纪录


这 些毫秒值


.


因为


long


是有符号整数,所以日期可以在



1970



1



1


日之前,也可以在这之后。


Long


类型表示的最大 正值和最大


负值可以轻松的表示


290



000



000

年的时间,这适合大多数人的时间要求。


让我们看一个使用系统的当前日期和时间创 建一个日期对象并返回一个长整数


的简单例子


.


这个时间通常被称为


Java


虚拟机

< br>(JVM)


主机环境的系统时间


.


import


public class DateExample1{public static void main(String] args){// Get the system


date/time Date date = new Date();//


打印出具体的年,月,日,小时,分钟,秒 钟


以及时区



n(e());}}


在星期六


,



2001



9


29



,


下午大约是


6:50


的样子


,


上面的例 子在系统输出设备上显


示的结果是




2



/


10




< /p>


09710.


在这个例子中


,

< p>
值得注意的是我们使用了


Date


构造函数创建一 个日


期对象


,


这个构造函数没有接受任 何参数


.


而这个构造函数在内部使用了


tTimeMillis()


方法来从系统获取日期


.


//1


年前日期



myDate=new ();


long myTime=(e()/1000)-60*60*24*365;


e(myTime*1000);


String mDate=(myDate);//


明天日期



myDate=new ();


myTime=(e()/1000)+60*60*24;


e(myTime*1000);


mDate=(myDate);


//


两个时间之间的天数



SimpleDateFormat myFormatter = new SimpleDateFormat(


date= (


mydate= (


longday=(e()-e())/(24*60*60*1000);


//


加半小时


SimpleDateForm at format = new SimpleDateFormat(


mm:


ss


long Time=(date


1.



3



/


10





date


1.

//


年月周求日期



SimpleDateFormat formatter2 = new SimpleDateFormat(


date2= formatter


2.


星期五



Simpl eDateFormat formatter3 = new SimpleDateFormat(


String mydate2=formatter


3.


//


求是星期几



mydate= (


SimpleDateFormat formatter4 = new SimpleDateFormat(


String mydate3=formatter


4.


1.


2.


格式化



能以一种用户明白的格式来显示这个日期呢


?


在这里类


DateFormat


和它的抽象基类


rmat


。那么


,


现在我们

已经知道了如何获取从



1970



1



1


日开 始经历的毫秒数了


.


我们如何才


for mat


就派得上用场了


.


//


我们能不能用下面的代码构件出


2001/8/8 8:8


import .*;



4



/


10





import .*;


public class WhatIsDate{public static void main(String[] args){Date date = new


Date(2001, 8, 8, 8, 8, 8);


n(date);}}


Java


的编译器竟然报如下信息


(Sun JDK


1.


中文下


)


注意:




使用 或覆盖一个不鼓励使用的


API




注意:



使用


-deprecation


重新编译,以得到详细信息。!那么


Date


对象究竟是为


了满足哪个需求呢?看来它不是用来实现 基于年


/



/


日小时


:


分钟的时间表述。我们查看


Java


的文档,我们看到有


getTime()


方法,它返


回的竟然是一个


long


值。文档进一步又告诉我们这个值代表了当前系统的时间


1970/1/1 0:0


的毫秒差,而且是在


GMT


时区下


(


也被称为


EPOC)




如果我们指定的时间是 在此之前的,那它将返回一个负数值。这个发现让


我们对


Dat e


对象有了一个全新的认识


-Date


存放的是与


EPOC


的偏差值。换而言


之我们也可通过


long


类型来表示时间?


对了,这个猜想是得到了


Java


的支持:



//


第二种获得当前时间的方法



long dateInMilliSeconds = tTimeMillis() ;//


这时候打印出的只是一


串数字而已


n(dateInMilliSeconds);


对程序执行效率敏感的程序员可以 发现这个方法只是生成一个


Java


的原始

类型


(primitive type) long,


不需 要实例化一个对象。因此如果我们对时间的处理只


是在内部进行时,可以用


long


来代替


Date


对 象。最典型的应用就是在一段代码



5



/


10



-


-


-


-


-


-


-


-