JAVA日期时间的计算
-
JAVA
日期时间的计算
最近,手头有不少项目,其中就有一个类似公文流转的项目,其中有一个
模
块是任务的制定,而在任务的类型中有一个循环任务,就是用户输入任务的
开始日期、结
束日期,还需要输入一个周期数,比如每周的星期几、每月的多
少号等,这里面就牵扯到
JAVA
日期时间的计算,从网上收集了一下,整理下
来,供大家参考
^_^
Java
语言的
Calendar
,
GregorianCalendar (
日历
),Date(
日期
),
和
D
ateFormat(
日期格式
)
组成
了
Java
标准的一个基本但是非常重要的部分
.
日期是
商业逻辑计算一个关键的部分
.
所有的开发者都应该能够计算未来的日期
,
定制日
期的显示格式
,
并将文本数据解析成日期对象。学习日期
,
日期格式
,
日期的解析和
日期的计算。
我们将讨论下面的类
:
1
p>
、具体类
(
和抽象类相对
< br>)
2
、抽象类
rmat
和它的一个具体子
类
,DateFormat
3
、
抽象类<
/p>
ar
和它的一个具体子
类
,ianCalendar
具体类可以被实例化
,
p>
但是抽象类却不能
.
你首先必
须实现抽象类的一个具体子类
.
及其格式化
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
p>
年
1
月
2
日,是在
1
月
1
日后的
86
,
400
,
000
毫秒。同样的,
1969
年
12
月
31
日是在
1970
年
1
月
p>
1
日前
86
,
p>
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.
在这个例子中
,
值得注意的是我们使用了
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
p>
时区下
(
也被称为
EPOC)
。
如果我们指定的时间是
在此之前的,那它将返回一个负数值。这个发现让
我们对
Dat
e
对象有了一个全新的认识
-Date
存放的是与
EPOC
的偏差值。换而言
之我们也可通过
long
类型来表示时间?
对了,这个猜想是得到了
Java
的支持:
//
第二种获得当前时间的方法
long dateInMilliSeconds = tTimeMillis()
;//
这时候打印出的只是一
串数字而已
n(dateInMilliSeconds);
对程序执行效率敏感的程序员可以
发现这个方法只是生成一个
Java
的原始
类型
(primitive type) long,
不需
要实例化一个对象。因此如果我们对时间的处理只
是在内部进行时,可以用
long
来代替
Date
对
象。最典型的应用就是在一段代码
5
/
10