本人之前做的是.net开发,在.net中对于时间的处理很方便,一个Date类就基本搞定了对时间操作的基本处理。但是在Java中就不太一样了,虽然Java中也有Date类,但Date多数用于获取或者格式化时间输出,如果涉及到对时间的自定义格式化输出或者对时间日期\时间的加减,就要配合其他类一起完成。
一、时间的比较
Date类在Java中属于元老级,但由于前期对Date类的设计相当糟糕,Java官方都建议不要使用Date类。实际上Date中存的是1970年1月1日起的毫秒数。
//Date 常用于粗略的获取时间字符串和比较
Date date = new Date();
date.after(Date date) //比较时间
date.before(Date date) //比较时间
date.toString() //粗略的获取时间字符串
二、格式化时间
如果想要更个性化的时间字符串的话就需要其他的类做辅助,SimpleDateFormat 类。
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
//输出:Current Date: Wed 2016.11.09 at 08:23:19 AM UTC
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
‘ | 文字定界符 | Delimiter |
“ | 单引号 | ` |
三、时间的操作
项目中对时间操作最多的就是时间的加减,加一天减一天或者指定某个特定的时间。Calendar类。
创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
//或者设置
c1.set(Calendar.DATE,10);
时间上的加减
c1.add(Calendar.DATE, 10);
虽然Date不推荐再使用,但是某些环境下还是需要Date的,Date需要与Calendar进行转换。
Calendar calendar = Calendar.getInstance();//日历类的实例化
calendar.set(year, month - 1, day);//设置日历时间,月份必须减一
Date date = calendar.getTime(); // 从一个 Calendar 对象中获取 Date 对象
Date date = new Date();//直接new对象,获取的是当前时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);