java中如何判断输入的日期是否合法?

java中如何判断输入的日期是否合法?,第1张

Java为了支持多语言,没有固定的日期格式。你需要根据自己的需要指定日期格式,然后用DateFormat类或者SimpleDateFormat类来判断是否是正确的日期格式。下面的例子供参考。更详细的内容(比如yyyy,MM,dd各代表什么)可以参考javadoc。

import javautilCalendar;
import javautilDate;
public class Test {
/
  @param args
 /

public static void main(String[] args) {

//表示我也没什么用过日历类去处理时间,大概思路就是去判断是否同一年and是否同一月
Systemoutprintln(equals(new Date(), new Date(new Date()getTime() + 1500000000l)));
Systemoutprintln(equals(new Date(), new Date(new Date()getTime() + 3000000000l)));

}

public static boolean equals(Date date1, Date date2) {

Calendar calendar1 = CalendargetInstance();
calendar1setTime(date1);
Calendar calendar2 = CalendargetInstance();
calendar2setTime(date2);
int year1 = calendar1get(CalendarYEAR);
int year2 = calendar2get(CalendarYEAR);
int month1 = calendar1get(CalendarMONTH);
int month2 = calendar2get(CalendarMONTH);
Systemoutprintln(year1 + "  " + month1);
Systemoutprintln(year2 + "  " + month2);
return calendar1get(CalendarYEAR) == calendar2get(CalendarYEAR) && calendar1get(CalendarMONTH) == calendar2get(CalendarMONTH);



}

import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
public class Test {
public static void main(String[] args) {
try {
//时间转换类
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdfparse("2014-1-10");
Date date2 = sdfparse("2012-12-20");
//将转换的两个时间对象转换成Calendard对象
Calendar can1 = CalendargetInstance();
can1setTime(date1);
Calendar can2 = CalendargetInstance();
can2setTime(date2);
//拿出两个年份
int year1 = can1get(CalendarYEAR);
int year2 = can2get(CalendarYEAR);
//天数
int days = 0;
Calendar can = null;
//如果can1 < can2
//减去小的时间在这一年已经过了的天数
//加上大的时间已过的天数
if(can1before(can2)){
days -= can1get(CalendarDAY_OF_YEAR);
days += can2get(CalendarDAY_OF_YEAR);
can = can1;
}else{
days -= can2get(CalendarDAY_OF_YEAR);
days += can1get(CalendarDAY_OF_YEAR);
can = can2;
}
for (int i = 0; i < Mathabs(year2-year1); i++) {
//获取小的时间当前年的总天数
days += cangetActualMaximum(CalendarDAY_OF_YEAR);
//再计算下一年。
canadd(CalendarYEAR, 1);
}
Systemoutprintln("天数差:"+days);
} catch (ParseException e) {
eprintStackTrace();
}
}
}
Console:
天数差:386

public class DateKit{
    /
                    时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了 
     @return 
    /
    public static boolean isContain(Date[] a, Date[] b) {
    
        long astatr = a[0]getTime();
        long aend   = a[1]getTime();
        
        long bstatr = b[0]getTime();
        long bend   = b[1]getTime();
        
        // a0 包在了 b0 ~ b1 之间
        if( astatr>=bstatr && astatr<=bend ) return true;
        
        // b0 包在了 a0 ~ a1 之间
        if( astatr<=bstatr && aend>=bstatr ) return true;
        
        return false;
    }
    
    /
                时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了 , (允许首尾相等而不包含的情况)
     @return 
    /
    public static boolean isContainEnd(Date[] a, Date[] b) {
    
        long astatr = a[0]getTime();
        long aend   = a[1]getTime();
        
        long bstatr = b[0]getTime();
        long bend   = b[1]getTime();
        
        // a0 包在了 b0 ~ b1 之间
        if( astatr>=bstatr && astatr<bend ) return true;
        
        // b0 包在了 a0 ~ a1 之间
        if( astatr<=bstatr && aend>bstatr ) return true;
        
        // 相等
        if( astatr==bstatr && aend==bend )  return true;
        
        return false;
    }
    
    // 功能 工具 扩展
    
        public static boolean isContain(String astatr,String aend, String bstatr,String bend) {
            return isContain(new String[]{astatr , aend}, new String[]{bstatr , bend});
        }
        
        public static boolean isContain(String[] aStr, String[] bStr) {
            return isContain(aStr, bStr, "yyyy-MM-dd HH:mm:ss");
        }
        
        public static boolean isContain(String[] aStr, String[] bStr, String pattern) {
            final SimpleDateFormat SF = new SimpleDateFormat(pattern);
            try {
                return isContain(new Date[]{SFparse(aStr[0]), SFparse(aStr[1])} , new Date[]{SFparse(bStr[0]), SFparse(bStr[1])});
            } catch (Exception e) {
                eprintStackTrace();
            }
            return false;
        }
        
        public static boolean isContainEnd(String astatr,String aend, String bstatr,String bend) {
            return isContainEnd(new String[]{astatr , aend}, new String[]{bstatr , bend});
        }
        
        public static boolean isContainEnd(String[] aStr, String[] bStr) {
            return isContainEnd(aStr, bStr, "yyyy-MM-dd HH:mm:ss");
        }
        
        public static boolean isContainEnd(String[] aStr, String[] bStr, String pattern) {
            final SimpleDateFormat SF = new SimpleDateFormat(pattern);
            try {
                return isContainEnd(new Date[]{SFparse(aStr[0]), SFparse(aStr[1])} , new Date[]{SFparse(bStr[0]), SFparse(bStr[1])});
            } catch (Exception e) {
                eprintStackTrace();
            }
            return false;
        }
    
}

测试:

 public static void main(String[] args) throws ParseException {
        final SimpleDateFormat SF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        Date[] a = {SFparse("2017-07-06 11:53:00"), SFparse("2017-07-06 14:52:00")};
        Date[] b = {SFparse("2017-07-06 14:52:00"), SFparse("2017-07-06 16:52:00")};
        
        Systemoutprintln("您好, 智能的电脑! 请问:");
        for (Date date : a) {
            Systemoutprint(datetoString() + " ~  ");
        }
        Systemoutprintln("包含:");
        for (Date date : b) {
            Systemoutprint(datetoString() + " ~  ");
        }
        Systemoutprintln("吗");
        
        boolean ret = DateKitisContain(a, b);
        Systemoutprintln("o(∩_∩)o 哈哈 ~ 我猜是: " + ret);
        
        ret = DateKitisContainEnd(a, b);
        Systemoutprintln("o(∩_∩)o 哈哈 ~ 允许首尾相等 我猜是: " + ret);
        
    }

找了半天, 没见写的好的 自己动手写个, 问题是 两个时段,, 大部分人给的是 两个时间点


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13410817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存