在实际工作中日期是我们非常用的一种类型,其原因相信不用我说了大家都明白,今天就写一篇文章记录一下自己在工作中常用的日期处理

  1. 日期格式化

日期格式化,在工作中,很多时候我们拿到的日期的格式不是我们想要的,那么就需要我们把它格式化成我们想要的,那么怎么做呢?
举个例子:我们想格式化当日时间为:2015-05-31 22:05:30,就可以这么做:


package cn.bridgeli.demo.date;

import java.text.SimpleDateFormat;  
import java.util.Date;

public class DateTest {

public void testSimpleDateFormat() {  
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
Date date = new Date();  
String now = simpleDateFormat.format(date);  
System.out.println(now);  
}

}

那么大家就可以根据自己的需要,去格式化大家想要的格式了,需要注意的一点是:我这里的“HH”是大写的表明是24时计时法,如果写成小写的“hh”,就变成12时计时法了。

  1. 获取当前的月份

我想有些人可能已经想到了,把上面的改成


SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM");

这个是能达到目的,但不够优雅,也不是官方所推荐的,也比较难以维护,下面我们看看标准的实现


package cn.bridgeli.demo.date;

import java.util.Calendar;  
import java.util.Date;

public class DateTest {

public void testSimpleDateFormat() {  
Calendar calendar = Calendar.getInstance();  
System.out.println(calendar.get(Calendar.MONTH));  
}

}

其实在JDK的早期版本中,Date类型是直接有genMonth()方法的,但由于Date类型比较简单,功能有限,所以后来JDK就把这个方法给废弃了(但为了兼容,目前还是可以用的),然后创造了Calendar,所以我们可以利用Calendar获取年份、月份、日期等等,具体可以查询JDK的API

  1. 获得当前周几

这个其实和上一个很类似,具体不多说了,大家查JDK的API中的Calendar就可以看到了


package cn.bridgeli.demo.date;

import java.util.Calendar;  
import java.util.Date;

public class DateTest {

public static void main(String[] args) {  
Date today = new Date();  
Calendar c = Calendar.getInstance();  
c.setTime(today);  
int weekday = c.get(Calendar.DAY_OF_WEEK);  
System.out.println(weekday);  
}

}
  1. 当前日期加一天

有时候我们,不仅需要当前时间,而且需要当前时间往前推或者往后推,这个时候我们就可以这么做:


package cn.bridgeli.demo.date;

import java.util.Calendar;  
import java.util.Date;

public class DateTest {

public static void main(String[] args) {  
Date date = new Date();  
Calendar calendar = Calendar.getInstance();  
calendar.setTime(date);  
calendar.add(Calendar.DATE, 1);// 把日期往后增加一天.整数往后推,负数往前移动  
date = calendar.getTime(); // 这个时间就是日期往后推一天的结果  
System.out.println(date);  
}

}
  1. 读取配置文件中的某一时间

因为无论new Date()还是Calendar.getInstance()获取的都是系统当前时间,但有时候我们从配置文件或者数据库中读取到了时间,我们怎么把它放到一个对象中呢,那么我们可以这么做:


package cn.bridgeli.demo.date;

import java.util.Calendar;  
import java.util.Date;

public class DateTest {

public static void main(String[] args) {  
Calendar calendar = Calendar.getInstance();  
Date date = XXX;  
calendar.setTime(date);  
}

}

注意例子因为是随便写的,所以就写了一个XXX

  1. 获取其他时区的时间

例如获取日本时区的时间,可以这么做:


package cn.bridgeli.demo.date;

import java.util.Calendar;  
import java.util.GregorianCalendar;  
import java.util.TimeZone;

public class DateTest {

public static void main(String[] args) {  
Calendar cJapen = new GregorianCalendar(TimeZone.getTimeZone("Japan"));  
System.out.println(cJapen.get(Calendar.HOUR_OF_DAY));  
}

}
  1. 字符串转日期

有时候我们获取到的是一个字符串,需要转成时间,那么我们可以这么处理


package cn.bridgeli.demo.date;

import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;

public class DateTest {

public static void main(String[] args) {  
String str = "2015-05-31 23:03:30";  
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
try {  
Date date = sdf.parse(str);  
System.out.println(date);  
} catch (ParseException e) {  
e.printStackTrace();  
}  
}

}

这些都是一些常见的关于日期的处理,相信大家看完这篇文章,再加上JDK的API文档,一定可以处理好工作中所有遇到的关于时间的处理问题