Java中对时间的使用,是很频繁的。也经常会忘,记录一下,以备不时之需……从需求入手:
时间获取和格式化相关
//获取当前日期对象
Date nowDate = new Date();
//有了date对象,就可以单独获取,年、月、日、这些信息了。
//这些方法除了nowDate.getTime()外,其它的都不建议使用了。
int d1 = nowDate.getDate();
int d2 = nowDate.getDay();
int d3 = nowDate.getHours();
int d4 = nowDate.getMinutes();
int d5 = nowDate.getMonth();
long d6 = nowDate.getTime();
int d7 = nowDate.getYear();
//获取当前时间并转为字符串 Fri Dec 26 09:51:35 CST 2014
//当然,这些内容一般不是我们想看到的
String d8 = new Date().toString();
//获取当前时间 格式为2014.11.12 13:14:15,这才是我们想看到的类型
DateFormat dateFormat1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:SSS");
String d9 = dateFormat1.format(new Date());
//把格式为2014-11-12 13:14:15的字符串日期,变成date对象
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String stringObj = "2014-11-12 13:14:15";
Date dateObj = dateFormat2.parse(stringObj);
//nowDate.getTime(),从1970年1月1日0:0:0开始到当前时间,
long haomiao1 = nowDate.getTime();
//Date newDateObj2 = haomiao1/(365 * 24 * 60 * 60); //另外long型的毫秒转日期,比较老土的方式
Date newDateObj1 = new Date(haomiao1);
//怎样获取当前的,年月日时分秒呢?用这个类
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1 ; //当前月 需要加1
int date = calendar.get(Calendar.DATE);
int hour = calendar.get(calendar.HOUR_OF_DAY); //假如说下午3点,会显示15
int hour2 = calendar.get(calendar.HOUR); //假如说下午3点,会显示3
int minute = calendar.get(calendar.MINUTE);
int second = calendar.get(calendar.SECOND);
int millisecond = calendar.get(Calendar.MILLISECOND);
//Calendar.DAY_OF_YEAR //当前年中的第几天
//Calendar.DAY_OF_MONTH //当前月的第几天
//Calendar.DAY_OF_WEEK //当前星期的第几天
//Calendar.WEEK_OF_MONTH //当前月的第几个星期
//Calendar.WEEK_OF_YEAR //当前年的第几个星期
System.out.println(year + "/" + month + "/" + date + " " +hour + ":" +minute + ":" + second + " " + millisecond + " " + hour2);
System.out.println("d1: " + d1);
System.out.println("d2: " + d2);
System.out.println("d3: " + d3);
System.out.println("d4: " + d4);
System.out.println("d5: " + d5);
System.out.println("d6: " + d6);
System.out.println("d7: " + d7);
System.out.println("d8: " + d8);
System.out.println("d9: " + d9);
System.out.println("d10: " + System.currentTimeMillis());//1419559281845
System.out.println("d11: " + new Date().getTime()); //1419559281845
时间的加减和比较大小相关
//日期比较大小
//把两个日期,都转成毫秒值相减
String stringDate1 = "2014-11-12";
String stringDate2 = "2014-12-13";
DateFormat dateFormat3 = new SimpleDateFormat("yyyy-MM-dd");
long longDate1 = dateFormat3.parse(stringDate1).getTime();
long longDate2 = dateFormat3.parse(stringDate2).getTime();
if (longDate1 - longDate2 > 0) {
System.err.println("longDate1 大于 longDate2");
}else {
System.err.println("longDate2 大于 longDate1");
}
//这个操作,还可以求出,两个日期之间,差出了多少天,或者小时,或者分钟,或者秒,或毫秒
long result = (longDate1 - longDate2)/(1000 * 60 * 60 * 24);
//把两个日期字符串,都转成日期对象
String datea = "2014-11-12";
String dateb = "2014-12-13";
DateFormat dateFormat6 = new SimpleDateFormat("yyyy-MM-dd");
Date obj6 = dateFormat6.parse(datea);
Date obj7 = dateFormat6.parse(dateb);
System.out.println(obj6.before(obj7)); //true
System.out.println(obj6.after(obj7)); //false
System.out.println(obj6.compareTo(obj7)); //-1
//在当前日期上加上3天,是几月几号呢
Calendar calendar2 = Calendar.getInstance();
calendar2.add(Calendar.DATE, 3);//减去三天,之间把3改成-3就行
//在指定日期上加上3天,是几月几号呢
String stringDate4 = "2014-11-12";
DateFormat dateFormat4 = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar4 = new GregorianCalendar();
calendar4.setTime(dateFormat4.parse(stringDate4));
calendar4.add(Calendar.DATE, 3);
System.out.println(dateFormat4.format(calendar4.getTime()));//calendar转为date对象,再转为string
//calendar对象,转成date对象
Date dateObj2 = calendar2.getTime();
//date对象转成calendar对象
Calendar calendar5 = Calendar.getInstance();
calendar5.setTime(new Date());
日期的格式化,主要用到的如下几个类
java.lang.Object
|
+—-java.text.Format
|
+—-java.text.DateFormat
|
+—-java.text.SimpleDateFormat
日期的类 java.util.Date
日历的抽象类 java.util.Calendar
日历的直接子类java.util.GregorianCalendar
备注:
字母 | 日期或时间元素 | 表示 | 示例 |
G | Era 标志符 | Text | AD |
y | 年 | Year | 1996; 96 |
M | 年中的月份 | Month | July; Jul; 07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Text | Tuesday; Tue |
a | Am/pm 标记 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm 中的小时数(0-11) | Number | 0 |
h | am/pm 中的小时数(1-12) | Number | 12 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | 时区 | RFC 822 time zone | -800 |
年, 月, 日, 时, 分, 秒, 毫秒
yyyy, MM, dd, HH, mm, ss, SSS
推荐两个工具:
joda-Time 和 jdatetime
这两个工具,较jdk操作时间的方法,更方便了些!