日期处理:
java.util.Date: 类 Date 表示特定的日期和时间,精确到毫秒。
三个子类
java.sql.Date
java.sql.Time
java.sql.Timestamp
常用构造函数:
Date():获取当前日期
Date(int year,int month,int date): 获取指定日期
year - 减 1900 的年份。
month - 0-11 的月份。
date - 一月中 1-31 之间的某一天
常用的方法:
过时的方法:在方法上带的有一个删除线
getYear():减 1900 的年份
getMonth():获取月份,范围0~11
getDate():获取日期
getHours():获取当前日期的小时数
getMinutes():获取当前日期的分钟数
getSeconds():获取当前日期的秒数:
toLocaleString():以与实现相关的方式创建此 Date 对象的字符串表示形式
before(Date when):测试此日期是否在指定日期之前。
after(Date when): 测试此日期是否在指定日期之后。
.....
格式化输入日期:DateFormat和SimpleDateFormat ***
java.text.DateFormat:抽象类
--java.text.SimpleDateFormat:DateFormat的子类
常用的构造函数:
SimpleDateFormat(String pattern)
pattern:
yyyy:年份 MM:月份 dd:日期 HH:小时(24进制) hh(12进制):小时 mm:分钟 ss:秒
常用方法:
format(Date d):将指定的日期格式化字符串
parse(String s):将字符串转换(解析)为日期,会一个检查异常ParseException需要捕获
public class TestDate { public static void main(String[] args) { //获取当前时间:距1970-1-1 00:00:00 的总毫秒数 // long now = System.currentTimeMillis(); // long days = now/1000/3600/24; // System.out.println("距1970年1月1日的总天数:"+days); // //获取当前时间 // Date date = new Date(); // System.out.println(date.toString()); // //过时的方法:在方法上有一个删除线 // System.out.println(date.toLocaleString()); /* year - 减 1900 的年份。 month - 0-11 的月份。 date - 一月中 1-31 之间的某一天 */ // Date date2 = new Date(116,3,17); // System.out.println(date2.toLocaleString()); //过时的方法:getXxx():获取日期中指定的xx部分 // int year = date.getYear(); // System.out.println(year);//距1900年的总年数 // int month = date.getMonth();//0~11之间,0代表1月 // System.out.println(month);// // int day = date.getDate();//日期 // System.out.println(day); // int hour = date.getHours();//小时 // System.out.println(hour); // int min = date.getMinutes(); // System.out.println(min); // int sec=date.getSeconds(); // System.out.println(sec); // //测试此日期是否在指定日期之前 // System.out.println(date.before(date2)); // //测试此日期是否在指定日期之后 // System.out.println(date.after(date2)); //将日期转换为字符串 Date nowDate = new Date(); DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd hh时mm分ss秒"); String str = dateFormat.format(nowDate); System.out.println(str); //将字符串转换为日期 String str2="2017-4-17"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date nowDate2 = sdf.parse(str2);//checked异常,必须进行捕获 System.out.println(nowDate2); } catch (ParseException e) { e.printStackTrace(); } } }
java.util.Calendar:抽象类
--java.util.GregorianCalendar:是Calendar的子类
如何获取实例
1.Calendar calendar = new GregorianCalendar();
2.Calendar calendar = Calendar.getIntance();
常用的方法:
get(field):获取日期的指定部分:get(int field)返回给定日历字段的值。
field: Calendar.YEAR
Calendar.MONTH
Calendar.DATE
Calendar.HOUR
Calendar.MINUTE
Calendar.SECOND
Calendar.DAY_OF_YEAR
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK ***
set(field,value):将日历字段 field 更改为 value
getActualMaximum(int field):给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值
add(int field, int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量
setTime(Date date):使用给定的 Date 设置此 Calendar 的时间
public class TestCalendar { public static void main(String[] args) { // Calendar calendar = new GregorianCalendar(); Calendar calendar = Calendar.getInstance();//创建实例 // System.out.println(calendar.toString()); //获取日期的指定部分:get(int field)返回给定日历字段的值。 int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH);//0~11 int date = calendar.get(Calendar.DATE); int hour = calendar.get(Calendar.HOUR); int min = calendar.get(Calendar.MINUTE); int sec = calendar.get(Calendar.SECOND); System.out.println(year+"-"+(month+1)+"-"+date+" "+hour+":"+min+":"+sec); //获取当前日期是一年中的第多少天 int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);//一年的第N天 int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);//一月的第N天 //查看今天是星期几? int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//一周的第N天(周日为第1天) System.out.println(dayOfYear+"-----"+dayOfMonth+"----"+dayOfWeek); //查看当月1号是一星期的第几天? //1.查看2016-4-17是一星期的第几天? calendar.set(Calendar.YEAR, 2016); calendar.set(Calendar.MONTH, 3);//0~11 calendar.set(Calendar.DATE, 17); // System.out.println(calendar); int oldDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); System.out.println("2016-4-17是一星期的第"+oldDayOfWeek+"天"); //查看当前日期所在月份是1号是一周的第几天? Calendar calendar2 = Calendar.getInstance(); calendar2.set(Calendar.DATE, 1);//2017-4-1 calendar2.add(Calendar.MONTH, 3);//2017-7-1 int dayOfWeek2 = calendar2.get(Calendar.DAY_OF_WEEK); System.out.println(dayOfWeek2); //获取当前月份最大的天数 int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println(max); } }
可视化日历
Calendar
可以判断这个月一共多少天calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
判断某一天是星期几
1.实现思路
1.按照提示输入任何一个日期
2.打印日历
1.打印日历头:日 一 二 三 四 五 六
2.打印1日之前的空格(循环)
3.打印每一天(循环),周六换行
2.涉及技能点
1.字符串转换成Date(DateFormat)
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(sdate);
2.Date转换成Calendar
cal.setTime(sdate);
3.获取当前输入的日期的日期部分:
把1999-12-23修改为1999-12-1
cal.set(Calendar.DATE,1);
4.判断1999-12-1是星期几
cal.get(Calendar.DAY_OF_WEEK)
5.获取当前月的最大天数
cal.getActualMaximum(Calendar.DATE)
6.如何判断每天是不是星期六,如果是周六,换行
cal.get(Calendar.DAY_OF_WEEK)==7
cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY
7.判断是不是当天,如果是,打印*
cal.get(Calendar.DATE) *
8.如何日期增加1天
cal.add(Calendar.DATE, 1);
public class TestVisualCalendar { public static void main(String[] args) { //1.获取用户输入的日期 System.out.println("请输入日期(2017-1-1)"); Scanner input = new Scanner(System.in); String dateStr = input.nextLine(); //2.将日期字符串转为日期 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = dateFormat.parse(dateStr);//shift+alt+z Calendar calendar = Calendar.getInstance();//获取Calendar对象(实例) calendar.setTime(date);//将输入的日期转为Calendar对象 //3.获取当前日期部分 int day = calendar.get(Calendar.DATE); //将当前日期设置成当月月份的第一天 calendar.set(Calendar.DATE, 1); //4.判断输入日期的月份的第一天是星期几 int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); //5.获取当前月份的最大天数 int maxDays = calendar.getActualMaximum(Calendar.DATE); //6.打印日历头信息 System.out.println("日 一 二 三 四 五 六"); //7.打印1日之前的空格(关键是知道1日时星期几) for(int i=1;i<dayOfWeek;i++){ System.out.print(' '); } for(int i=1;i<=maxDays;i++){ System.out.print(i+" "); if(day==i){ System.out.print("*"); } int w = calendar.get(Calendar.DAY_OF_WEEK); if(w==Calendar.SATURDAY){ System.out.println();//当前日期如果是周六的话需要换行 } calendar.add(Calendar.DATE, 1); } } catch (ParseException e) { e.printStackTrace(); } } }