【Java基础】时间处理相关类——万年历

在这里插入图片描述

一、java.util.Date类

  1. 大部分方法已经过期,但是仍可以使用
  2. 使用频率较高的方法是getTime()方法,返回时间戳
  3. java.sql.Date类继承自util.Date类,其中大部分方法也已经过期。

二、java.text.DateFormat类

用于定制日期时间的格式,通过子类java.text.SimpleDateFormat进行具体实现

//参数是一个日期的格式
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//参数是Date类的一个对象,将其按照规定好的日期格式转换为字符串格式
String str = dateFormat.format(new Date());
//将字符串转换为日期类
Date d1 = dateFormat.parse("2010-10-10 20:20:20");

三、java.util.Calendar类

  1. 是一个抽象类,不能通过new来初始化Calendar类。用于设置和获取时间/日期数据的特定部分。
  2. 使用getInstance()方法创建对象,获取的是当前系统的时间。
  3. 使用setTime()方法可以设置指定时间的日历类。
//获取当前系统时间
Calendar calendar = Calendar.getInstance();
//设定为指定的Date类的时间
calendar.setTime(new Date(2020, 10, 3));
//通过get方法获取日历信息,传递的参数是int类型的常量参数,分别对应日历信息
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
...
//使用getActualMaximum()可以获取某范围内的最大值
//如:获取某月的天数
int monthDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

四、使用Calendar类制作一个万年历

  • 使用了Calendar类中的方法和常量获取了日期时间的信息。
  • 难点:灵活使用Calendar类的对象中的常量来计算所需的信息;万年历的格式如何对齐;
  • 有待改进:对异常的处理还需要完善,目前只是对于输入非整型内容的异常处理。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.Scanner;

public class CalendarUser {
    public static void main(String[] args) {
        int year, month, day;
        Scanner in = new Scanner(System.in);
        try {
            System.out.println("请输入年份:");
            year = in.nextInt();
            System.out.println("请输入月份:");
            month = in.nextInt();
            System.out.println("请输入日期:");
            day = in.nextInt();
        } catch (InputMismatchException e) {
            System.out.println("请输入正确格式的年月日!");
            return;
        }
        new CalendarUser().print(year, month, day);
    }

    public void print(int year, int month, int day) {

        Date date = new Date(year-1900, month-1, day);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        System.out.println(" Sun  Mon  Tue  Wed  Thu  Fri  Sat");
        System.out.println("-----------------------------------");
        int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) % 7;
        
        //打印当月的月历
        for(int i = 0; i < (calendar.getActualMaximum(Calendar.WEEK_OF_MONTH))*7; i++) {
            int realDate = i-firstDayOfWeek+1;
            System.out.print(" ");
            if(i <= firstDayOfWeek-1)
                System.out.print("   ");
            else {
                if (realDate < 10)
                    System.out.print("  " + realDate);
                else if (realDate > calendar.getActualMaximum(Calendar.DAY_OF_MONTH))
                    break;
                else
                    System.out.print(" " + (i - firstDayOfWeek + 1));
            }
            if(realDate == day)
                System.out.print("*");
            else
                System.out.print(" ");

            if(i % 7 == 6)
                System.out.println();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值