Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
yyyyMMddHHmmss中的Java验证日期_Java_Java 7_Java.util.date - Fatal编程技术网

yyyyMMddHHmmss中的Java验证日期

yyyyMMddHHmmss中的Java验证日期,java,java-7,java.util.date,Java,Java 7,Java.util.date,我想用java验证给定的日期格式为yyyyMMddHHmmss 条件: 它应符合yyyyMMddHHmmss格式 它应该验证当前日期 它应该验证与当前小时相差+3小时或-3小时的小时数 如果这三个条件都满足,Java方法应该返回true 我的当前代码仅验证yyyyMMddHHmmss格式 我当前的代码 public class SO31132861 { public static void main(String[] args) { SimpleDateFormat df = new S

我想用java验证给定的日期格式为yyyyMMddHHmmss

条件:

  • 它应符合yyyyMMddHHmmss格式

  • 它应该验证当前日期

  • 它应该验证与当前小时相差+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;
    }
    }
    
    公共类SO31132861{
    公共静态void main(字符串[]args){
    SimpleDataFormat df=新的SimpleDataFormat(“yyyyMMddHHmmss”);
    df.setLenient(假);
    系统输出打印LN(tryParse(df,“20160630231110”);
    系统输出打印项数(tryParse(df,“20150228231100”);
    系统输出打印LN(tryParse(df,“20160229231100”);
    System.out.println(tryParse(df,“21000229231100”);//非闰年2100年2月29日
    System.out.println(tryParse(df,“2016063123110”);//6月31日无效日
    System.out.println(tryParse(df,“20160229231160”);//秒>59
    System.out.println(tryParse(df,“20150229231100”);//2015年非闰年2月29日
    System.out.println(tryParse(df,“20150228241100”);//小时数>23
    }
    私有静态布尔tryParse(日期格式df,字符串s){
    布尔有效=假;
    试一试{
    日期三小时前=新日期();
    设置时间前三小时(System.currentTimeMillis()-(3*60*60*1000));
    日期三小时后=新日期();
    设置时间后三小时(System.currentTimeMillis()+(3*60*60*1000));
    Date dateToParse=df.parse;
    valid=dateToParse.compareTo(三小时前)>0&&dateToParse.compareTo(三小时后)<0;
    }捕获(解析异常){
    有效=错误;
    }
    返回有效;
    }
    }
    
    纯代码编写请求与堆栈溢出无关——我们希望这里的问题与特定的编程问题有关——但我们很乐意帮助您自己编写!告诉我们,你被困在哪里了。这也将帮助我们更好地回答您的问题。我看到您发布了一些要求,但我还没有看到任何有针对性的具体问题。你做了什么?你到底被困在哪里?有关如何改进您的问题并增加获得适当帮助的机会的更多信息,请查看。前两个可以通过
    SimpleDateFormat
    实现,第三个可能需要来自Java 8的Time API或JodaTimeAPI的
    LocalDateTime
    。您根本不清楚这是什么意思“它应该验证当前日期”-你是说唯一有效的日期是当前日期吗?老实说,在输入中包含日期似乎有些奇怪…此外,你需要指定这些验证规则要在哪个时区工作。如果现在是凌晨1点,“3小时前“规则意味着昨天的日期毕竟是有效的?