Java中关于日期的处理方法
(1)Date
* Date:
* 介绍是java.util包下的Date类,这个类是负责描述日期这类数据的。
* Date主要是描述当前时间毫秒值对象。
* 它中的很多方法不利于国际化,已经被废弃。
*
* Date是把当前的毫秒值封装成Date对象。
* 如何把一个毫秒值转成Date对象
* Date()它是把当前的时间点的毫秒值转成Date对象
* Date(long date) 把我们指定的一个毫秒值转成Date对象
* setTime(long time) 把当前的Date对象设置成指定的毫秒值对应的那个日期对象
*
* 如何把一个Date对象转成毫秒值
* Date类中有个getTime方法,可以把一个Date对象转成毫秒值
public class DateDemo { public static void main(String[] args) { //创建Date对象 Date d = new Date(); d.setTime(1380000910915L); // Date d = new Date(1380000910915L); System.out.println(d); System.out.println(d.toGMTString()); System.out.println(d.toLocaleString()); System.out.println(d.getTime()); } }
(2)DateFormat
DateFormat类:
这类位于java.text包下。
这个类是个抽象类,这个类不能直接new对象。
DateFormat类主要是把日期对象格式化成字符串数据
Date对象,通过DateFormat类,可以被格式化成字符串数据"xxxx-xx-xx hh:mm:ss"
DateFormat类还可以一个字符串数据解析成Date对象。
"xxxx-xx-xx hh:mm:ss" 解析成Date对象
格式化:把对象格式化成文本(字符串)
解析:把文本(字符串)变成对象
由于DateFormat类是抽象类,它不能创建对象,但是这个类对外提供部分的静态方法,这些方法可以获取到本类的对象。
getDateInstance方法有重载,在获取DateFormat对象的时候可以指定风格
DateFormat.FULL: 2014年8月22日 星期五
DateFormat.LONG: 2014年8月22日
DateFormat.MEDIUM: 2014-8-22 是默认风格
DateFormat.SHORT: 14-8-22
在使用DateFormat类中parse方法来解析一个字符串数据的时候,字符串数据给定的格式必须和获取DateFormat对象时指定的风格一致,
这样才能够解析,否则解析失败。
//使用DateFormat类把字符串形式的日期数据解析成Date对象 public static void method_2() throws ParseException { //字符串形式的日期数据 String time = "2014年8月22日 星期五"; //获取DateFormat对象 DateFormat df = DateFormat.getDateInstance( DateFormat.FULL ); //解析字符串 Date d = df.parse(time); System.out.println(d); } //使用DateFormat类对日期进行格式化 public static void method_1() { //获取DateFormat对象 //DateFormat df = DateFormat.getDateInstance(); //DateFormat df = DateFormat.getDateInstance( DateFormat.SHORT ); DateFormat df = DateFormat.getDateTimeInstance( DateFormat.MEDIUM,DateFormat.MEDIUM ); //创建一个Date对象 Date d = new Date(); System.out.println(d); //对这个Date对象进行格式化 String time = df.format(d); System.out.println(time); }
(3)SimpleDateFormat
当我们想按照自己指定的风格来解析字符串数据或者格式化日期 对象时,可以使用DateFormat的子类SimpleDateFormat。
/* * 演示使用SimpleDateFormat格式化Date对象 * "xxxx年xx/xx HH时mm分ss秒" */ public static void method_4() { //获取Date对象 Date d = new Date(); //获取格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM/dd HH时mm分ss秒"); //对日期对象进行格式化 String time = sdf.format(d); System.out.println(time); } /* * 演示使用SimpleDateFormat类解析指定的格式数据 * "2014/08/22" 对应的格式:"yyyy/MM/dd" * "2414/08/22 23:23:23" "yyyy/MM/dd HH:mm:ss" */ public static void method_3() throws ParseException { //字符串形式的日期数据 String time = "2414/08/22 23:23:23"; //创建SimpleDateFormat对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //解析 Date d = sdf.parse(time); System.out.println(d); }
/* * 需求: * 有2个字符串形式的日期数据,需要计算它们相距多少天? * "2014年09/28 23时13分01秒" * "2009-02月12日 12时02分01秒" * * 思路: * 要计算天数,首先需要把字符串形式的日期数据变成毫秒值,然后再通过毫秒值的相减得到时间差,然后再转成相距的天数。 * 如何把字符串数据变成毫秒值呢? * 可以通过Date对象中的getTime方法,把一个Date对象转成毫秒值 * 把字符串日期数据转成Date对象,可以使用SimpleDateFormat类完成 */ public class DateTest { public static void main(String[] args) throws ParseException { String s1_time = "2014年09/28 23时13分01秒"; String s2_time = "2013-09月27日 23时13分01秒"; //获取格式器 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM/dd HH时mm分ss秒"); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM月dd日 HH时mm分ss秒"); //解析字符串 Date d1 = sdf1.parse(s1_time); Date d2 = sdf2.parse(s2_time); //把当前的日期对象转成毫秒值 long time_1 = d1.getTime(); long time_2 = d2.getTime(); long day = (Math.abs(time_1 - time_2))/1000/60/60/24; System.out.println(day); } }
(4)Calendar
Calendar:
位于java.util包下。
这个类主要是用来描述日历数据。
Calendar类是个抽象类可以通过getInstance方法获取其实例。
它中定义很多静态成员变量,把日历上常见的年,月,日,时分秒,星期等数据都封装成静态的成员变量,
可以通过Calendar类直接获取其对应的数据。
在计算机中月份从0开始,0表示1月,1表示2月,11表示12月。
星期也是从0开始,0表示星期日,1表示星期一
我们获得了Calendar实例之后,就可以通过Calendar类中的get方法获取当前这个实例中封装的所有的数据。
在使用get方法时,需要使用Calendar类本身和其中的静态成员变量结合使用。
在Calendar类中有set方法,可以把Calendar实例中的对应的数据修改为我们想指定的具体年月日时分秒等信息
add方法可以在指定的成员变量上修改它对应的数据
public class CalendarDemo { public static void main(String[] args) { method_2(); } /* * 任意一年的2月有多少天 * * 思路: * 获取一个Calendar实例,然后通过set方法把当前的月份设置为3月1日。 * 然后在使用add方法,让当前的月中的天数-1.这时再去获取当前的天数,一定是2月的最后一天。 */ public static void method_2() { //获取Calendar实例 Calendar c = Calendar.getInstance(); //使用循环来提供年份 for( int year = 1998;year<=2100;year++ ){ //使用set方法设置当前年月日 c.set(year, 2, 1); //使用add方法让天数-1 c.add(Calendar.DAY_OF_MONTH, -1); System.out.println("当前"+year+"年的2月共计有:"+c.get(Calendar.DAY_OF_MONTH)); } } //Calendar方法演示 public static void method_1() { //获取Calendar实例 Calendar c = Calendar.getInstance(); System.out.println(c.get(Calendar.YEAR)); //使用set方法来设置年月日 //c.set(2011, 12, 12); c.add(Calendar.YEAR, -1); System.out.println(c.get(Calendar.YEAR)); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。