Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒。 是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。 由于Date的设计具备"千年虫"以及"时区"的问题,因此Date中的大部分方法已经不建议使用了,它们都被"java.util.Calendar"类所取代,从API中就能够发现,好多方法都已经废弃掉了。 经常使用的方法:getTime() 、setTime()
//实例化对象 Date date = new Date(); System.out.println(date.getTime());
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它容许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。常常使用来格式化日期。 经常使用的方法:formate(Date date)、 parse(String s)
//格式化时间字符串 String StrD ="2017-04-20 11:22:45"; SimpleDateFormat sdfd =new SimpleDateFormat("yyy-MM-dd HH:mm:ss"); Date dat =sdfd.parse(StrD); System.out.println(dat);
java.util.Calendar 是一个抽象类,用于封装日历信息,其主要做用在于其方法能够对时间份量进行运算。 它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了方法。 经常使用的方法: getInstance()、set() 、get()、getActualMaximum()、add()、gettime()、setTime(Date)
//设置当前的时间为 2017-04-25 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR,2017); calendar.set(Calendar.MONTH,04); /* * 对于几号而言 calendar 提供了两个时间份量 * 意义彻底相同,选择其中的一个就好 * DAY_OF_MONTH * DATE */ calendar.set(Calendar.DATE,25); calendar.set(Calendar.DAY_OF_MONTH, 25);
public String getCurrentDate(){ String nowDate = ""; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 nowDate = df.format(new Date());// new Date()为获取当前系统时间 return nowDate; }
/** * 获取详细的时间 */ public void getDateDetail() { Calendar calendar = Calendar.getInstance(); // 建立对象 = Calendar.getInstance();// 能够对每一个时间域单独修改 int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1;// 月,从0开始,便是输出5表示6月 int date = calendar.get(Calendar.DATE); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); int am_pm = calendar.get(Calendar.AM_PM); // 得到是上午仍是下午AM=0,PM=1 int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 一个月中的第几天 int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 一周中的第几天,星期日是第一天 int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR); // 一年中的第几天 int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); // 一天中的第几小时 if (calendar.get(Calendar.AM_PM) == Calendar.AM) { System.out.println("如今是上午"); } if (calendar.get(Calendar.MONTH) + 1 == Calendar.JULY) { System.out.println("如今是6月"); } System.out.println(year + "/" + month + "/" + date + " " + hour + ":"+ minute + ":" + second); }
/** * 日期的 add() * 日期加上一个正数就是时间向后(将来)移动,日期加上负数就是向前(过去)移动 * 当日期加到 32 的时候,就会顺移到下一个月 */ public void addDate(){ DateFormat df = new SimpleDateFormat("yyyy-MM-dd EE hh:mm:ss"); Calendar c = Calendar.getInstance(); //获取当前日期的实例 c.add(Calendar.MONTH, 1); //当前时间加一个月 //c.add(Calendar.MONTH, -1); //当前时间减一个月 System.out.println(df.format(c.getTime())); //格式化输出当前的时间 c.add(Calendar.HOUR, 3); // 当前时间加 3个小时 //c.add(Calendar.HOUR, -3); // 当前时间减 3个小时 System.out.println(df.format(c.getTime())); c.add(Calendar.YEAR, 1); //当前时间加一年 //c.add(Calendar.YEAR, -1); //当前时间减一年 System.out.println(df.format(c.getTime())); c.add(Calendar.DAY_OF_WEEK, 7); // 当前时间加7天 //c.add(Calendar.DAY_OF_WEEK, -7); // 当前时间减7天 System.out.println(df.format(c.getTime())); }
/** * 日期比较 */ public void compareDate(){ //日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString_01 = "2017-01-01 11:11:11"; String dateString_02 = "2016-01-02 11:11:11"; try { Date date_01 = sdf.parse( dateString_01 ); Date date_02 = sdf.parse( dateString_02 ); System.out.println( date_01.before(date_02) ); //true,当 date_01 小于 date_02 时,为 true,不然为 false System.out.println( date_02.after(date_01) ); //true,当 date_02 大于 date_01 时,为 true,不然为 false System.out.println( date_01.compareTo(date_02) ); //-1,当 date_01 小于 date_02 时,为 -1 System.out.println (date_02.compareTo(date_01) ); //1,当 date_02 大于 date_01 时,为 1 System.out.println( date_02.compareTo(date_02) ); //0,当两个日期相等时,为 0 } catch (ParseException e) { e.printStackTrace(); } }
/** * 计算日期相隔多少天 * @throws ParseException */ public void calculateDate() throws ParseException{ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date beginDate= format.parse("2017-06-24"); Date endDate= format.parse("2017-06-30"); long day = ( endDate.getTime()-beginDate.getTime() )/(24*60*60*1000); System.out.println(day); }
因为 Java8 出了新特性,附上连接:Java8新特性之日期处理java