一 显示系统时间
package cn.itcast.api.a.date; import java.text.DateFormat; import java.util.Date; public class DateDemo { /** * @param args */ public static void main(String[] args) { long time = System.currentTimeMillis(); //【怎么能将这个时间转成我们所熟悉的时间呢?】 //通过另请参阅找到Date类。 发现日期对象一初始化可以传递一个毫秒值。 //创建了一个日期对象,将已有的毫秒值进行封装。通过日期对象的方法获取其中的相关信息。比如年月日。 Date date = new Date(time); System.out.println(date.toString());//Sun Oct 27 09:35:34 CST 2013 //对象的方法已过时。通过toString获取了国际化的信息。如何让信息本土化。 //toLocaleString() 已过时,通过查阅信息发现替代从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。 //要格式化一个当前语言环境下的日期,可使用某个静态工厂方法:myString = DateFormat.getDateInstance().format(myDate); //在获取格式器对象时可以明确风格。 FULL、LONG、MEDIUM(默认风格)和 SHORT DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL); dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); //调用format方法对日期对象进行格式化。用默认风格。 String str_date = dateFormat.format(date); System.out.println(str_date); } }
二 calendar
package cn.itcast.api.a.date; import java.util.Calendar; public class DateDemo2 { /** * @param args */ public static void main(String[] args) { //需求2:基于需求1,获取到了日期和时间的字符串信息(本地)。 //如何获取字符串中指定的日期信息呢?比如获取年,并判断。 //1,获取日期对象。Date // Date date = new Date(); //jdk1.1开始 Calendar。//获取日历对象。 Calendar c = Calendar.getInstance();// int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH)+1; int day = c.get(Calendar.DAY_OF_MONTH); String week = getCnWeek(c.get(Calendar.DAY_OF_WEEK)); //打印信息中年月日等相关信息都在这里。获取指定字段的值就哦了。 System.out.println(year+"年"+month+"月"+day+"日 "+week); } //让星期字段对应的中文的星期。查表。数组。 public static String getCnWeek(int i) { if(i<0 || i>7){ throw new RuntimeException(i+"没有对应的星期"); } //定义表。 String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; return weeks[i]; } }
三 小练习
3.1 "2012-3-17"转成日期对象
前面做了一个日期转文本(详见一),称为格式化,现在做的是文本转日期,称为解析
package cn.itcast.api.a.date; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateTest { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { // 练习2 :"2012-3-17"转成日期对象。 /* * 之前有做过,将一个日期对象转成日期文本字符串这个称之为格式化。 * 现在要做的是文本--->日期对象:解析。 * 这些都是DateFormat中的功能。 * * 不同日期风格的文本对应不同的格式器。 */ String str_date = "2012年3月17日"; //日期格式器。DateFormat DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG); Date date = dateFormat.parse(str_date); System.out.println(date); //这种格式在给定的四种风格中不存在。怎么解析呢?只能使用子类SimpleDateFormat的方法, //1,构造函数明确特定风格,2,applyPattern 方法来修改格式模式 str_date = "2013/3/17 17--13--45"; DateFormat dateFormat2 = new SimpleDateFormat("yyyy/MM/dd hh--mm--ss"); Date date2 = dateFormat2.parse(str_date); System.out.println(date2); } }
3.2 获取多少天
package cn.itcast.api.a.date; import java.text.DateFormat; import java.text.ParseException; import java.util.Date; public class DateTest2 { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { // 练习3,"2013-4-25"到"2013年7月29日"到底有多少天? /* * 思路: * 1,到底有多少天?相减的过程。 * 2,字符串也不能相减啊,毫秒值可以相减。 * 3,怎么获取毫秒值呢?毫秒值-->日期对象, 日期对象-->毫秒值。 * 4,怎么获取日期对象呢?需要将字符串文本--解析-->日期对象。 */ String str_date1 = "2013-4-25"; String str_date2 = "2013年7月29日"; //需要定义两个模式。一个解析str_date1,一个解析str_date2。 int style_1 = DateFormat.MEDIUM;//默认风格。 int style_2 = DateFormat.LONG;//默认风格。 int days = getDays(str_date1,str_date2, style_1,style_2); System.out.println("days="+days); } private static int getDays(String str_date1, String str_date2, int style_1, int style_2) throws ParseException { //1,根据给定风格创建格式器对象。 DateFormat format_1 = DateFormat.getDateInstance(style_1); DateFormat format_2 = DateFormat.getDateInstance(style_2); //2,对文本进行解析。 Date date_1 = format_1.parse(str_date1); Date date_2 = format_2.parse(str_date2); //3,获取日期对象毫秒值。 long time_1 = date_1.getTime(); long time_2 = date_2.getTime(); //4,相减。 long time = Math.abs(time_1 - time_2); // System.out.println(time); int day = (int)(time/1000/60/60/24); return day; } }
3.3 2月份天数
package cn.itcast.api.a.date; import java.util.Calendar; public class DateTest3 { /** * @param args */ public static void main(String[] args) { // 4,获取给定年份的2月有多少天?【面试题】 for (int year = 2000; year <= 2020; year++) { show(year); } } public static void show(int year) { Calendar c = Calendar.getInstance();// // 有获取有设置 set // c.set(Calendar.YEAR, 2011); c.set(year, 2, 1); // 时间是连续的,3月1日的前一天就2月的最后一天,知道2月份的天数。 c.add(Calendar.DAY_OF_MONTH, -1); int year1 = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH) + 1; int day = c.get(Calendar.DAY_OF_MONTH); String week = getCnWeek(c.get(Calendar.DAY_OF_WEEK)); // 打印信息中年月日等相关信息都在这里。获取指定字段的值就哦了。 System.out.println(year1 + "年" + month + "月" + day + "日 " + week); } public static String getCnWeek(int i) { if (i < 0 || i > 7) { throw new RuntimeException(i + "没有对应的星期"); } // 定义表。 String[] weeks = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; return weeks[i]; } }
四 总结
2,获取的毫秒值怎么转成我们习惯的日期时间格式呢?
Date,DateForamt。
3,转换
3.1 毫秒值time--new Date(time) , date.setTime(time)-->日期对象date。
3.2 日期对象date--date.getTime()-->毫秒值time
3.3 格式化:日期对象date --DateFormat.getDateInstance(style).format(date)-->文本
3.4 解析:文本 --DateFormat.getDateInstance(style).parse(文本)-->日期对象date
4,获取DateFormat对象的几种方式。style: FULL LONG MEDIUM SHORT
4.1 getDateInstance(datestyle);
4.2 getDateTimeInstance(datestyle,timestyle);
4.3 new SimpleDateFormat(pattern)。
5,获取日期中的具体的字段。年 月 日 等。
5.1 使用Calendar对象。
5.2 get set add(对指定字段进行偏移