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"格式的字符串,获取明天的日期是多少。
首先判断给定的日期格式是否正确。
- 闰年有29天
- 其他的每一个月按照给定日期
- 日大于月天数,月加1,天数变成1.
- 月大于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;
}
}