java日期计算

文章目录

  • java的Date和Calendar类的使用
  • 手动计算明天的日期
  • 蓝桥杯回文日期

java的Date和Calendar类的使用

  • 日历中包含Date类
  • Date可以使用sdf类与字符串相互转化
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class DateTestUtil {


    public static void main(String[] args) throws Exception {

        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
        String str="20110823";
        Date dt=sdf.parse(str);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.YEAR,-1);//日期减1年
        rightNow.add(Calendar.MONTH,3);//日期加3个月
        rightNow.add(Calendar.DAY_OF_YEAR,10);//日期加10天
        Date dt1=rightNow.getTime();
        String reStr = sdf.format(dt1);
        System.out.println(reStr);

    }

}

手动计算明天的日期

输入一个形如"yyyyMMdd"格式的字符串,获取明天的日期是多少。
首先判断给定的日期格式是否正确。

  1. 闰年有29天
  2. 其他的每一个月按照给定日期
  3. 日大于月天数,月加1,天数变成1.
  4. 月大于12,年份加1,月份变成1
private static int nextDay(int num) throws ArrayIndexOutOfBoundsException {
        int year = num / 10000, month = (num / 100) % 100, day = num % 100;
        int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        // 闰年2月有29天
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) days[2] = 29;                
        if (year > 9999 || month > 12 || day > days[month]) {
            throw new ArrayIndexOutOfBoundsException("日期格式错误!");
        }
        day++;
        // 新的一月
        if (day > days[month]) {
            month++;
            day = 1;
        }
        // 新的一年
        if (month > 12) {
            month = 1;
            year++;
        }
        return year * 10000 + month * 100 + day;
    }

蓝桥杯回文日期

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 计算回文日期
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();

        int flag1 = 1, flag2 = 1;
        while (flag1 == 1 || flag2 == 1) {
            Integer num = Integer.parseInt(s);
            s = String.valueOf(runTime(num));
            if (flag1 == 1 && checkP(s)) {
                System.out.println(s);
                flag1 = 0;
            }
            if (flag2 == 1 && checkA(s)) {
                System.out.println(s);
                flag2 = 0;
            }
        }
    }
    private static int runTime(int num) throws ArrayIndexOutOfBoundsException {
        int year = num / 10000, month = (num / 100) % 100, day = num % 100;
        int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) days[2] = 29;                 // 闰年2月有29天
        if (year > 9999 || month > 12 || day > days[month]) {
            throw new ArrayIndexOutOfBoundsException("日期格式错误!");
        }
        day++;
        if (day > days[month]) {
            month++;
            day = 1;
        }
        if (month > 12) {
            month = 1;
            year++;
        }
        return year * 10000 + month * 100 + day;
    }
    // 检查 是否是ABAB
    private static boolean checkA(String s) {
        if (!checkP(s)) return false;
        return s.substring(0, 2).equals(s.substring(2, 4));
    }
    // 检查是否是回文串
    private static boolean checkP(String s) {
        int i = 0, j = s.length() - 1;
        while (i < j) {
            if (s.charAt(i) != s.charAt(j))
                return false;
            i++;
            j--;
        }
        return true;
    }
}

你可能感兴趣的:(算法,java,蓝桥杯,开发语言)