浅析Date与Calendar
来源:互联网 发布:apache 跨域访问配置 编辑:程序博客网 时间:2024/05/16 23:37
看其他东西看烦了,就翻着看看java基础,发现好多东西学了之后没有整理出来,现在再去看的话觉得好陌生,仿佛从来没看过一样……,今天就来总结一下java里面对于时间与日期的处理这部分的内容
在这里就不详细介绍很早之前的时间度量方式了,感兴趣的小伙伴可以找找资料了解一下,现在就简单介绍一下Date和Calendar吧…
时间轴上瞬间的Date
我们知道,想要取得系统时间,具体来说有两种方法:
方法一是System.currentTimeMillis()方法,这个返回的是long类型的整数,代表的是1970年1月1日0时0分0秒0毫秒至今经过的毫秒数。
方法二是使用Date实例来取得系统时间描述,不过,两种方法并没有什么大区别,Date也是偏向机器的时间观点.
可以看出,这两种方法取得的是机器的时间观点,代表时间轴上的某一瞬间,但是需要思考的是,这一长串毫秒数对与我们人类的阅读有什么意义???
package com.Datetime;import java.util.Date;import static java.lang.System.currentTimeMillis;/** * Created by dongmengyuan on 17-8-9. */public class DateDemo { public static void main(String[] args) { Date date1 = new Date(currentTimeMillis()); Date date2 = new Date(); System.out.println(date1.getTime()); System.out.println(date2.getTime()); }}
诺,来看看计算机的回复:
emmmm…
无疑是没有什么意义的,这就好比,你问计算机现在几点了,计算机给你返回一长串数字,想想都可怕…
格式化时间日期的DateFormat
通过上面的简单介绍,可以发现,有关字符串时间格式的处理已经不再是Date的职责了,所以,这重任就落到了java.text.DateFormat身上。
DateFormat是一个抽象类,他的操作类是java.text.SimpleDateFormat。
我们有两种方式来操作它,第一种是直接构建SimpleDateFormat的实例,另一种是使用DateFormatgetDateInstance(),getTimeInstance(),getDateTimeInstance()等静态方法,用简便方式按不同需求取得SimpleDateFormat实例。
现在先来看看如何通过DateFormat的各种静态方法来对字符串时间进行格式化操作。
package com.Datetime;import java.util.*;import static java.text.DateFormat.*;/** * Created by dongmengyuan on 17-8-15. */public class DateFormatDemo { public static void main(String[] args) { Date date = new Date(); dateInstanceDemo(date); timeInstanceDemo(date); dateTimeInstanceDemo(date); } static void dateInstanceDemo(Date date) { System.out.println("getDateInstance() demo:"); System.out.printf("\t: %s%n",getDateInstance(LONG).format(date)); System.out.printf("\t: %s%n",getDateInstance(SHORT).format(date)); } static void timeInstanceDemo(Date date) { System.out.println("getTimeInstance() demo:"); System.out.printf("\t: %s%n",getTimeInstance(LONG).format(date)); System.out.printf("\t: %s%n",getTimeInstance(MEDIUM).format(date)); System.out.printf("\t: %s%n",getTimeInstance(SHORT).format(date)); } static void dateTimeInstanceDemo(Date date) { System.out.println("getDateTimeStance() demo:"); System.out.printf("\t: %s%n",getDateTimeInstance(LONG,LONG).format(date)); System.out.printf("\t: %s%n",getDateTimeInstance(SHORT,MEDIUM).format(date)); System.out.printf("\t: %s%n",getDateTimeInstance(SHORT,SHORT).format(date)); }}
格式化结果是:
getDateInstance(),getTimeIntance(),getDateTimeInstance()等静态方法主要是用来取得不同详细程度的日期时间。
再来试试直接构建SimpleDateFormat的实例的方法
package com.Datetime;import java.util.*;import java.text.*;/** * Created by dongmengyuan on 17-8-15. */public class CurrentTime { public static void main(String[] args) { DateFormat dateFormat = new SimpleDateFormat(args.length == 0 ? "EE-MM-dd--yyyy" : args[0]); System.out.println(dateFormat.format(new Date())); }}
效果如下:
很容易看出,使用这种直接构建SimpleDateFormat实例的好处就是可以使用模式字符串自定义格式。
处理时间日期的Calendar
如果想要取得某个时间日期信息,或是下想要对时间日期进行操作,可以使用Calendar实例。
Calendar是一个抽象类,取得Calendar的实例后,可以使用getTime()取得Date实例,如果想要取得年月日等日期时间字段,可以使用get()方法并指定Calendar上的字段枚举常数,如:
System.out.println(Calendar.YEAR); //2017System.out.println(Calendar.MONTH); //7System.out.println(Calendar.DATE); //15
在这里需要注意的是:得到的数字是对应至Calendar在月份上的列举值,但是列举值的一月是从0数字开始,所以得到的月份数字比实际的月份在数值上小一
public final static int JANUARY = 0;public final static int FEBRUARY = 1;......public final static int DECEMBER = 11;
如果要设定时间日期等字段,不要对Date设定,应使用Calendar,同样,月份部分使用枚举常数设定。
如下:
Calendar calendar = Calendar.getInstance();calendar.set(2017,Calendar.AUGUST,15); System.out.println(Calendar.YEAR); //2017System.out.println(Calendar.MONTH); //8System.out.println(Calendar.DATE); //15
在取得Calendar实例后,可以使用add()方法来改变Calendar的时间,如下:
//Calendar的时间加1个月Calendar.add(Calendar.MONTH,1);//Calendar的时间加3小时Calendar.add(Calendar.HOUR,3);//Calendar的时间减2年Calendar.add(Calendar.YEAR,-2);
如果Calendar设定的时间是2014/2/28,(非闰年),Calendar.add(Calendar.DATE,1)的结果是2014/3/1。——计算结果是下一天应有的日期。
但是如果我只想针对日期中某个字段计算呢?
这时应该用roll()方法。
例如,对于2014/2/28,想要只改变日字段,我们就选择使用roll()方法,Calendar.roll(Calendar.DATE,1)的结果是2014/2/1,可以看出也只是处理了日字段部分,因为2014年的2月没有29,所以实际上回到了1日.
设定Timezone
在前面的示例中,都没有涉及到使用时区信息,这样的话是使用默认时区的,我们可以使用java.util.Timezone的getDefault()来取得默认时区信息,如:
package com.Datetime;/** * Created by dongmengyuan on 17-8-15. */import java.util.TimeZone;public class TimezoneDemo { public static void main(String[] args) { TimeZone timezone = TimeZone.getDefault(); System.out.println(timezone.getDisplayName()); System.out.println("\t时区ID:" + timezone.getID()); System.out.println("\t日光节约时数:" + timezone.getDSTSavings()); System.out.println("\tUTC偏移毫秒数:" + timezone.getRawOffset()); }}
结果:
当然,你要是想取得指定地区的TimeZone实例,可以使用ID字符串,如:
TimeZone taipeiTz = TimeZone.getTimeZone("Asia/Taipei"); TimeZone copenhagenTz = TimeZone.getTimeZone("Europe/Copenhagen");
嗯,这块东西大概就是这样啦,总结一下,方便回忆!
- 浅析Date与Calendar
- Calendar 与 Date 转换
- Calendar与Date类
- Calendar与Date
- Date与Calendar类
- calendar与Date
- Calendar 与 Date 的点点滴滴
- Calendar与Date的转换
- android-Date 与 DateFormat 与 Calendar
- JAVA的Date类与Calendar类
- 6.8 Date 与Calendar DateFormat类
- JAVA的Date类与Calendar类
- JAVA的Date类与Calendar类
- JAVA的Date类与Calendar类
- JAVA的Date类与Calendar类
- JAVA的Date类与Calendar类
- JAVA的Date类与Calendar类
- JAVA的Date类与Calendar类
- 2017.8.09 SSL 模拟赛
- java8的特性
- 记录:成像与坐标系转换
- 2017年全国电子设计大赛A题问题重述
- Bartender条码使用方法C#
- 浅析Date与Calendar
- 闲聊软件测试自动化(1):测试自动化的好处我们知道多少?
- faster-rcnn:制作自己的数据集
- 装箱问题
- MediaCodec学习笔记
- 使用DBUtils查询数据,如果使用ArrayListHandler等都能够返回正确值,但使用BeanListHandler 和 BeanHandler则一直返回null
- 你不得不知的推进DevOps实践的四大趋势
- 起点
- EJB到底是什么,真的那么神秘吗??