「JAVA」Date类,Calendar类详解,可视化日历小程序
一、功能:
输入:2017-10-03
输出:
二、代码:
1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.GregorianCalendar; 5 import java.util.Scanner; 6 import java.util.Date; 7 8 public class VisualCalender { 9 public static void main(String[] args) { 10 System.out.println("请输入日期:"); 11 12 Scanner sc=new Scanner(System.in); 13 String str_1=sc.nextLine(); 14 //定义时间转换格式 15 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 16 17 Date t = null; 18 try { 19 //将字符串按照格式转化为Date对象 20 t = df.parse(str_1); 21 }catch (ParseException e){ 22 System.out.println(e); 23 } 24 //创建calendar对象并将事件设置为date的值 25 GregorianCalendar gCalendar = new GregorianCalendar(); 26 gCalendar.setTime(t); 27 //得到目标天的号数 28 int today = gCalendar.get(Calendar.DAY_OF_MONTH); 29 //将目标天的号数设为1 30 gCalendar.set(Calendar.DAY_OF_MONTH,1); 31 //得到目标月份的最大天数 32 int maxday = gCalendar.getActualMaximum(Calendar.DAY_OF_MONTH); 33 //得到目标月第一天是该星期的第几天 34 int day_in_week = gCalendar.get(Calendar.DAY_OF_WEEK); 35 //输出日历前面的空格使日历对齐 36 System.out.println("日\t一\t二\t三\t四\t五\t六"); 37 for(int i = 1;i <= day_in_week - 1;i++){ 38 System.out.print("\t"); 39 40 } 41 //输出日历 42 for(int i = 1;i <= maxday;i++){ 43 gCalendar.set(Calendar.DAY_OF_MONTH,i); 44 System.out.print(i + "\t"); 45 //如果这天是星期六就换行 46 if(gCalendar.get(Calendar.DAY_OF_WEEK) == 7){ 47 System.out.println(); 48 } 49 //将"今天"在输出的日历中做标记 50 if(i + 1 == today){ 51 System.out.print("*"); 52 } 53 } 54 } 55 }
三、Date类:
JAVA中时间是以1970年1月1号0点为原点,向现在以及未来无限延伸的的数轴。数轴的最小单位为毫秒,例如1970年一月一号凌晨一点:60*60*1000.
Date类位于java.util包中
1 import java.util.Date; 2 3 public class testDate { 4 public static void main(String[] args) { 5 //无参构造默认当前时间 6 Date t = new Date(); 7 //传入一个整数则转化为毫秒从标准纪元计算时间 8 Date t1 = new Date(2000); 9 //System.currentTimeMillis()方法表示取得系统当前时间,返回值为long型毫秒值 10 long nowtime = System.currentTimeMillis(); 11 System.out.println(t); 12 System.out.println(t1); 13 System.out.println(nowtime); 14 } 15 } 16 17 18 //输出: Thu Oct 19 21:29:48 CST 2017 19 Thu Jan 01 08:00:02 CST 1970 20 1508419788544
Date对象通过getTime()方法返回他对应的long类型的值。最开始Date类功能很强大,后来在某一版本中将其与年月日有关的一部分功能分出并启用Calendar类。剩余的一般方法还有getTime(),设置时间setTime(Long l),判断两个Date对象是否相等equals(),Date对象时间上先后比较before(),after(),toString(),hashCode(),等等
四、Dateformat和SimpleDateformat,字符串与Date对象之间的转换
Dateformat是抽象类,不能实例化,常用为他的子类SimpleDateformat。位于java.text包中
1 import java.text.DateFormat; 2 import java.text.ParseException; 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 6 public class testDate { 7 public static void main(String[] args) throws ParseException { 8 //定义时间转换格式 9 DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日"); 10 Date date = new Date(233333333l); 11 String string = "2017年01月21日"; 12 //parse(String)将标准字符串按定义的格式转换为Date对象,需要抛出异常 13 Date date1 = dateFormat.parse(string); 14 //format(Date)将Date对象按定义的格式转换为标准字符串 15 String string1 = dateFormat.format(date); 16 System.out.println(date1);//输出:Sat Jan 21 00:00:00 CST 2017 17 System.out.println(string1);//输出:1970年01月04日 18 } 19 }
时间转换格式参数:
区分大小写,年月日中间的间隔符可以自定义,常用格式为:2017-10-10或者是2017年10月10日
五、Calendar类:
Calendar类同Date类位于java.util包中,其详细定义了操作年,月,日的方法,主要操作方式为set方法和get方法,简单易懂。下面是可视化日历小程序中对Calendar类进行操作的部分,其他设置类同:
1 GregorianCalendar gCalendar = new GregorianCalendar(); 2 gCalendar.setTime(t); 3 //得到目标天的号数 4 int today = gCalendar.get(Calendar.DAY_OF_MONTH); 5 //将目标天的号数设为1 6 gCalendar.set(Calendar.DAY_OF_MONTH,1); 7 //得到目标月份的最大天数 8 int maxday = gCalendar.getActualMaximum(Calendar.DAY_OF_MONTH); 9 //得到目标月第一天是该星期的第几天 10 int day_in_week = gCalendar.get(Calendar.DAY_OF_WEEK);