package com.wzh;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
static long minTime = Timestamp.valueOf("1970-01-01 09:00:00").getTime();
static long maxTime = Timestamp.valueOf("2038-01-19 11:00:00").getTime();
static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//判断 并转换时间格式 ditNumber = 43607.4166666667
public static String getTime(String ditNumber) {
//如果不是数字
if(!isNumeric(ditNumber)){
return null;
}
//如果是数字 小于0则 返回
BigDecimal bd = new BigDecimal(ditNumber);
int days = bd.intValue();//天数
int mills = (int) Math.round(bd.subtract(new BigDecimal(days)).doubleValue() * 24 * 3600);
//获取时间
Calendar c = Calendar.getInstance();
c.set(1900, 0, 1);
c.add(Calendar.DATE, days - 2);
int hour = mills / 3600;
int minute = (mills - hour * 3600) / 60;
int second = mills - hour * 3600 - minute * 60;
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, second);
Date d = c.getTime();//Date
Timestamp t = Timestamp.valueOf(dateFormat.format(c.getTime()));//Timestamp
try {
//时间戳区间判断
if(minTime <= d.getTime() && d.getTime() <= maxTime){
return dateFormat.format(c.getTime());
}else{
return "outOfRange";
}
} catch (Exception e) {
System.out.println("传入日期错误" + c.getTime());
}
return "Error";
}
//校验是否数据含小数点
private static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9]+\\.*[0-9]*");
Matcher isNum = pattern.matcher(str);
if(!isNum.matches()){
return false;
}
return true;
}
public static boolean isValidDate(String str) {
boolean convertSuccess=true;// 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
boolean convertSuccess1 = true;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
try {
// 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
format.setLenient(false);
format.parse(str);
} catch (ParseException e) {
// e.printStackTrace();
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
convertSuccess=false;
}
try {
format1.setLenient(false);
format1.parse(str);
} catch (ParseException e) {
convertSuccess1=false;
}
if(convertSuccess1||convertSuccess){
return true;
}else {
return false;
}
}
public static void main(String[] args) {
Boolean flag = isValidDate("43934.6037731481");
if(!flag){
String date = getTime("43934.6037731481");
System.out.println(flag+":"+date);
}
}
}
部分代码从其他地方转载的!