一、功能:
输入: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 }
View Code
三、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);