[java]Java中时间格式化及相关操作

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操作时间的方法,更方便了些!

发表评论

电子邮件地址不会被公开。 必填项已用*标注