簡體   English   中英

yyyyMMddHHmmss中的Java驗證日期

[英]Java validate date in yyyyMMddHHmmss

我想在 java 中將給定的日期格式驗證為 yyyyMMddHHmmss。

狀況:

  1. 它應該符合格式 yyyyMMddHHmmss。

  2. 它應該驗證當前日期。

  3. 它應該驗證可能與當前小時有 +3 小時或 -3 小時差異的小時數。

如果滿足所有三個條件,Java 方法應返回 true。

我當前的代碼僅驗證 yyyyMMddHHmmss 格式。

我當前的代碼

public class SO31132861 {
public static void main(String[] args) {
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    df.setLenient(false);

    System.out.println(tryParse(df, "20160630231110"));
    System.out.println(tryParse(df, "20150228231100"));
    System.out.println(tryParse(df, "20160229231100"));

    System.out.println(tryParse(df, "21000229231100")); // 29th Feb on non-leap year 2100
    System.out.println(tryParse(df, "20160631231110")); // 31st Jun invalid day
    System.out.println(tryParse(df, "20160229231160")); // Second > 59
    System.out.println(tryParse(df, "20150229231100")); // 29th Feb on non-leap year 2015
    System.out.println(tryParse(df, "20150228241100")); // Hour > 23

}

private static Boolean tryParse(DateFormat df, String s) {
    Boolean valid=false;
    try {
        Date d= df.parse(s);
        valid=true;
    } catch (ParseException e) {
         valid=false;
    }
    return valid;
}
}

使用另外兩個日期(提前三個小時和三個小時后)進行比較。 然后使用compareTo()確保您解析的日期在這兩個邊界之間。

你真的不應該在你的班級名稱中加入數字,但這是一個與答案無關的風格問題。

public class SO31132861 {
public static void main(String[] args) {
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    df.setLenient(false);

    System.out.println(tryParse(df, "20160630231110"));
    System.out.println(tryParse(df, "20150228231100"));
    System.out.println(tryParse(df, "20160229231100"));

    System.out.println(tryParse(df, "21000229231100")); // 29th Feb on non-leap year 2100
    System.out.println(tryParse(df, "20160631231110")); // 31st Jun invalid day
    System.out.println(tryParse(df, "20160229231160")); // Second > 59
    System.out.println(tryParse(df, "20150229231100")); // 29th Feb on non-leap year 2015
    System.out.println(tryParse(df, "20150228241100")); // Hour > 23

}

private static Boolean tryParse(DateFormat df, String s) {
    Boolean valid=false;
    try {
        Date threeHoursBefore = new Date();
        threeHoursBefore.setTime(System.currentTimeMillis() - (3*60*60*1000));

        Date threeHoursAfter = new Date();
        threeHoursAfter.setTime(System.currentTimeMillis() + (3*60*60*1000));

        Date dateToParse= df.parse(s);

        valid=dateToParse.compareTo(threeHoursBefore) > 0 && dateToParse.compareTo(threeHoursAfter) < 0;
    } catch (ParseException e) {
         valid=false;
    }
    return valid;
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM