判断日期合法
利用Java中的类库进行判断合法性,避免了手动判断的繁琐。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) { SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMMdd"); //SimpleDateFormat类定义日期格式,构造方法内格式可以自己定义,如yyyy-MM-dd也可以 simpleDateFormat.setLenient(false); //SimpleDateFormat类的setLenient方法是将输入的日期格式转化为标准日期 String s="20220229"; try { Date date=simpleDateFormat.parse(s); //SimpleDateFormat类的parse方法用来判断日期是否合法,如果不合法会报异常,所以这条语句用try catch包裹 System.out.println("yes"); } catch (ParseException e) { System.out.println("no"); } } } // no
合法日期(2021模拟赛)
题目描述
小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。
没想到,日记很快就被老师发现了问题,原来小蓝记完 8 月 31 日的日记,竟又记了 8 月 32 日和 8 月 33 日的日记。这显然是有问题的,因为根本没有 8 月 32 日和 8 月 33 日。
给定一个月份和一个日期,请问 2021 年有没有这一天。
输入描述
输入的第一行包含一个整数 mm,表示月份。
第二行包含一个整数 dd,表示日期。
其中,1≤m≤20,1≤d≤40。
输出描述
如果2021年有 mm 月 dd 日,输入 yes,否则输出 no。
import java.util.Scanner; import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMMdd"); simpleDateFormat.setLenient(false); int a=scanner.nextInt(); int b=scanner.nextInt(); String m=String.format("%02d",a); //将输入的月份转换为字符串类型,不足两位的用0补齐 String d=String.format("%02d",b); //将输入的日期转换为字符串类型,不足两位的用0补齐 String s="2021"+m+d; try { Date date=simpleDateFormat.parse(s); System.out.println("yes"); } catch (Exception e) { System.out.println("no"); } } }
回文日期(2020省赛)
这道题在上一篇文章《备战蓝桥》之数组专练中已经写出了题解,此处就是针对那道题的日期合法性判断部分做出了改变。
题解思路不懂的可以参考上一篇文章《备战蓝桥》之数组专练。
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class Demo3 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n=scan.nextInt(); String s3=String.valueOf(n); //s3作用是为了在后边输出数字时跳过输入的日期,因为题目要求时下一个 n=n/10000;//取前四位日期数 int count=0; //因为只需输出两行,count到达2时直接跳出循环 for (int i = n; i <= 9999; i++) { String s1=String.valueOf(i); //将前四位数字转换为字符串 StringBuilder str=new StringBuilder(s1); //利用StringBuilder的特性将字符串倒置 str.reverse(); String s2=str.toString(); String s=s1+s2; //s完成拼接 if(checkIs(s)&&!(s.equals(s3))) { //!(s.equals(s3))就是为了跳过输入的日期 if(count==0) { //回文日期只输出1次,所以输出条件为(count==0) System.out.println(s); count++; } if(checkAs(s2)) { System.out.println(s); count++; } //因为该日期可能既是回文日期,又是ABABBABA型,所以同一个日期进行二次判断 } if(count==2) break; } scan.close(); } //判断合法性 public static boolean checkIs(String s) { SimpleDateFormat ss=new SimpleDateFormat("yyyyMMdd"); ss.setLenient(false); try { Date date=ss.parse(s); return true; } catch (Exception e) { return false; } } //判断是否为ABABBABA public static boolean checkAs(String s) { if(s.charAt(0)==s.charAt(2)&&s.charAt(1)==s.charAt(3)) return true; return false; } }