dateutil.java

来自「WAP PUSH后台源码,WAP PUSH后台源码」· Java 代码 · 共 326 行

JAVA
326
字号
package com.sxit.wap.common;
import java.util.*;
import java.sql.*;
import com.sxit.wap.exception.*;
public class DateUtil {
  private static String sysChar;//日期分隔符
  static {
    sysChar="-";
  }
  public static Timestamp getStatBeginDate(Timestamp workDate) {
    return getFirstDayInMonth(workDate);
  }
  public static Timestamp getStatEndDate(Timestamp workDate) {
    Timestamp endDate = getLastDayInMonth(workDate);
    if (endDate.after(getCurrTime())) {
      return getCurrTime();
    } else {
      return getLastDayInMonth(workDate);
    }
  }
  public static Timestamp getFirstDayInMonth(Timestamp currDate) {
    String yyyy = getYYYY(currDate);
    String mm = getMM(currDate);
    return getTimestamp(Integer.parseInt(yyyy), Integer.parseInt(mm), 1);
  }
  public static Timestamp getLastDayInMonth(Timestamp currDate) {
    String yyyy = getYYYY(currDate);
    String mm = getMM(currDate);
    Timestamp t = getTimestamp(Integer.parseInt(yyyy), Integer.parseInt(mm), 31);
    if (Integer.parseInt(getMM(currDate)) != Integer.parseInt(getMM(t))) {
      t = getTimestamp(Integer.parseInt(yyyy), Integer.parseInt(mm), 30);
      if (Integer.parseInt(getMM(currDate)) != Integer.parseInt(getMM(t))) {
        t = getTimestamp(Integer.parseInt(yyyy), Integer.parseInt(mm), 29);
        if (Integer.parseInt(getMM(currDate)) != Integer.parseInt(getMM(t))) {
          t = getTimestamp(Integer.parseInt(yyyy), Integer.parseInt(mm), 28);
          if (Integer.parseInt(getMM(currDate)) != Integer.parseInt(getMM(t))) {
            t = getTimestamp(Integer.parseInt(yyyy), Integer.parseInt(mm), 27);
          }
        }
      }
    }
    return t;
  }
  /************************取特定时间函数************************/
  public static Timestamp getSomeDate(int space){//根据时间间隔来取得某个时间,例如:参数为1时,得到明天的日期,参数为30时,得到一个月后的日期,参数为0时,得到今天的日期,参数为-1时,得到昨天的日期,参数为-30时,得到一个月前的日期,
    return getSomeDate(getCurrTime(),space);
  }
  public static Timestamp getSomeDate(Timestamp t,int space){//比上面的方法多一个日期参数,上面方法默认为当天,所以没此参数
    java.util.Date someDate=(java.util.Date)t;
    int sign=space<0?-1:1;
    space=space<0?-space:space;
    int s=space/10;
    int y=space%10;
    for (int i=0;i<s;i++){
      someDate=new java.util.Date(someDate.getTime()+3600*24*1000*10*sign);
    }
    someDate=new java.util.Date(someDate.getTime()+3600*24*1000*y*sign);
    java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat ("yyyy", Locale.getDefault());
    int someDateYear = Integer.parseInt(formatter.format(someDate));//求一个月前是什么年
    formatter = new java.text.SimpleDateFormat ("M", Locale.getDefault());
    int someDateMonth = Integer.parseInt(formatter.format(someDate));//求一个月前是几月
    formatter = new java.text.SimpleDateFormat ("dd", Locale.getDefault());
    int someDateDay = Integer.parseInt(formatter.format(someDate));//求一个月前是几号
    return getTimestamp(someDateYear,someDateMonth,someDateDay);
  }
  public static String getYYYY(Timestamp t){//取特定时间的年份,比如2003年
    if (isEmptyTime(t)) return "";
    String yyyy=getFM("yyyy",t);
    yyyy="0000"+yyyy;
    return yyyy.substring(yyyy.length()-4);
  }
  public static String getYYYY(String date) {//取特定日期字符串(如2003-12-11)的年份
    StringTokenizer st = new StringTokenizer(date, "-/");
    return st.nextToken();
  }
  public static String getMM(Timestamp t){//取特定时间的月份,比如4月
    if (isEmptyTime(t)) return "";
    String mm=getFM("M",t);
    mm="00"+mm;
    return mm.substring(mm.length()-2);
  }
  public static String getMM(String date) {//取特定日期字符串(如2003-12-11)的月份
    StringTokenizer st = new StringTokenizer(date, "-/");
    st.nextToken();
    String mm = st.nextToken();
    if (mm.length() == 1) mm = "0" + mm;
    return mm;
  }
  public static String getDD(Timestamp t){//取特定时间的日,比如3号
    if (isEmptyTime(t)) return "";
    String dd=getFM("dd",t);
    dd="00"+dd;
    return dd.substring(dd.length()-2);
  }
  public static String getDD(String date) {//取特定日期字符串(如2003-12-11)的号数
    StringTokenizer st = new StringTokenizer(date, "-/");
    st.nextToken();
    st.nextToken();
    String dd = st.nextToken();
    if (dd.length() == 1) dd = "0" + dd;
    return dd;
  }
  public static String getYYYYMM(Timestamp t){//取特定时间的年月份,比如2003-04
    if (isEmptyTime(t)) return "";
    return getYYYY(t)+sysChar+getMM(t);
  }
  public static String getYYYYMMDD(Timestamp t){//取特定时间的年月日,比如2003-04-03
    if (isEmptyTime(t)) return "";
    return getYYYYMM(t)+sysChar+getDD(t);
  }
  public static String getHH(Timestamp t){
    if (isEmptyTime(t)) return "";
    String hh=getFM("H",t);
    hh="00"+hh;
    return hh.substring(hh.length()-2);
  }
  public static String getMI(Timestamp t){
    if (isEmptyTime(t)) return "";
    String mi=getFM("m",t);
    mi="00"+mi;
    return mi.substring(mi.length()-2);
  }
  public static String getSS(Timestamp t){
    if (isEmptyTime(t)) return "";
    String ss=getFM("s",t);
    ss="00"+ss;
    return ss.substring(ss.length()-2);
  }
  public static String getHHMISS(Timestamp t){//取特定时间的时分秒,比如12:45:30
    if (isEmptyTime(t)) return "";
    return getHH(t)+":"+getMI(t)+":"+getSS(t);
  }
  public static String getYYYYMMDDHHMISS(Timestamp t){//取特定时间的年月日时分秒,比如2003-04-03 12:45:30
    if (isEmptyTime(t)) return "";
    return getYYYYMMDD(t)+" "+getHHMISS(t);
  }
  public static Timestamp getTimestamp(int year,int month,int day,int hour,int minute,int second){//通过代入年月日时分秒构造Timestamp时间对象
    Calendar cal=Calendar.getInstance(Locale.getDefault());
    cal.set(year,month-1,day,hour,minute,second);
    return new Timestamp(cal.getTime().getTime());
  }
  public static Timestamp getTimestamp(int year,int month,int day){//通过代入年月日构造Timestamp时间对象
    return getTimestamp(year,month,day,0,0,0);
  }
  public static Timestamp getTimestamp(String date) {
      return getTimestamp(Integer.parseInt(getYYYY(date)),
                          Integer.parseInt(getMM(date)),
                          Integer.parseInt(getDD(date)), 0, 0, 0);
  }
  public static String DateToString(Timestamp t){
    if (t==null) {
      return "1970"+sysChar+"01"+sysChar+"01"+" "+"00"+":"+"00"+":"+"00";
    }else{
      return getYYYYMMDDHHMISS(t);
    }
  }
  /************************取当前时间函数************************/
  public static Timestamp getCurrTime(){
    return new Timestamp(System.currentTimeMillis());
  }
  public static String getYYYY(){//取当前年份,比如2003年
    return getYYYY(getCurrTime());
  }
  public static String getMM(){//取当前月份,比如4月
    return getMM(getCurrTime());
  }
  public static String getDD(){//取当前日,比如03号
    return getDD(getCurrTime());
  }
  public static String getYYYYMM(){//取当前年月份,比如2003-04
    return getYYYYMM(getCurrTime());
  }
  public static String getYYYYMMDD(){//取当前年月日,比如2003-04-03
    return getYYYYMMDD(getCurrTime());
  }
  public static String getHH(){
    return getHH(getCurrTime());
  }
  public static String getMI(){
    return getMI(getCurrTime());
  }
  public static String getSS(){
    return getSS(getCurrTime());
  }
  public static String getHHMISS(){//取当前时分秒,比如12:45:30
    return getHHMISS(getCurrTime());
  }
  public static String getYYYYMMDDHHMISS(){//取当前年月日时分秒,比如2003-04-03 12:45:30
    return getYYYYMMDDHHMISS(getCurrTime());
  }
  public static boolean isEmptyTime(Timestamp t) {
    return getTimestamp(1970, 01, 01, 00, 00, 00).getTime() == t.getTime();
  }
  /************************其它方法************************/
  public static boolean isDate(String s) {//检查日期格式是否正确
    StringTokenizer st=new StringTokenizer(s,"-");
    try{
      if (st.hasMoreElements()){
        String strYear=(String)st.nextElement();
        if (strYear.length()==4){
          int year=Integer.parseInt(strYear);
          if (year>=1970 && year<=2470) {
            if (st.hasMoreElements()){
              String strMonth=(String)st.nextElement();
              if (strMonth.length()==1 || strMonth.length()==2){
                int month =Integer.parseInt(strMonth);
                if (month >0 && month <=12) {
                  if (st.hasMoreElements()){
                    String strDay=(String)st.nextElement();
                    if (strDay.length()==1 || strDay.length()==2){
                      int day =Integer.parseInt(strDay);
                      if (day >0 && day <=31) {
                        if (!st.hasMoreElements()){
                          return true;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }catch(Exception e){
    }
    return false;
  }
  public static boolean isTime(String s) {//检查时间格式是否正确
    StringTokenizer st=new StringTokenizer(s,":");
    try{
      if (st.hasMoreElements()){
        String strHour=(String)st.nextElement();
        if (strHour.length()==2){
          int hour=Integer.parseInt(strHour);
          if (hour>=0 && hour<24) {
            if (st.hasMoreElements()){
              String strMinute=(String)st.nextElement();
              if (strMinute.length()==2){
                int minute =Integer.parseInt(strMinute);
                if (minute >=0 && minute <60) {
                  if (st.hasMoreElements()){
                    String strSecond=(String)st.nextElement();
                    if (strSecond.length()==2){
                      int second =Integer.parseInt(strSecond);
                      if (second >=0 && second <60) {
                        if (!st.hasMoreElements()){
                          return true;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }catch(Exception e){
    }
    return false;
  }
  public static String getDateSql(int dbType, Timestamp t) {
    String sql = "";
    if (dbType == DBType.ORACLE) {
      sql = "TO_DATE('" + DateUtil.getYYYYMMDDHHMISS(t) + "', 'YYYY-MM-DD HH24:MI:SS')";
    } else if (dbType == DBType.SQLSERVER) {
      sql = "'" + DateUtil.getYYYYMMDDHHMISS(t) + "'";
    } else if (dbType == DBType.MYSQL) {
      sql = "'" + DateUtil.getYYYYMMDDHHMISS(t) + "'";
    }
    return sql;
  }
  public static String getDateCompareSql(int dbType, String dateColumnName, Timestamp bt, Timestamp et) {
    String strBt = getDateSql(dbType, bt);
    String strEt = getDateSql(dbType, et);
    return " " + dateColumnName + " >= " + strBt + " AND " + dateColumnName + " < " + strEt + " ";
  }
  public static String getDateCompareSql(int dbType, String dateColumnName, String bt, String et) {
    return getDateCompareSql(dbType, dateColumnName, getTimestamp(bt), getTimestamp(et));
  }
  public static String getDateCompareSql(int dbType, String dateColumnName, Timestamp t) {
    Timestamp bt = getTimestamp(Integer.parseInt(getYYYY(t)), Integer.parseInt(getMM(t)), Integer.parseInt(getDD(t)));
    Timestamp et = getSomeDate(t, 1);
    et = getTimestamp(Integer.parseInt(getYYYY(et)), Integer.parseInt(getMM(et)), Integer.parseInt(getDD(et)));
    return getDateCompareSql(dbType, dateColumnName, t, et);
  }
  public static String getDateCompareSql(int dbType, String dateColumnName, String t) {
    return getDateCompareSql(dbType, dateColumnName, getTimestamp(t));
  }
  public static String getDateBeforeSql(int dbType, String dateColumnName, Timestamp et) {
    String strEt = getDateSql(dbType, et);
    return " " + dateColumnName + " < " + strEt + " ";
  }
  public static String getDateBeforeSql(int dbType, String dateColumnName, String t) {
    return getDateBeforeSql(dbType, dateColumnName, getTimestamp(t));
  }
  public static Timestamp getLastMonthFirstDay() {
    java.util.Calendar calendar = java.util.Calendar.getInstance();
    calendar.set(Integer.parseInt(DateUtil.getYYYY()),Integer.parseInt(DateUtil.getMM()),1,0,0,0);
    calendar.add(java.util.Calendar.MONTH,-2);
    return new Timestamp(calendar.getTime().getTime());
  }
  public static Timestamp getCurrMonthFirstDay() {
    java.util.Calendar calendar = java.util.Calendar.getInstance();
    calendar.set(Integer.parseInt(DateUtil.getYYYY()),Integer.parseInt(DateUtil.getMM()),1,0,0,0);
    calendar.add(java.util.Calendar.MONTH,-1);
    return new Timestamp(calendar.getTime().getTime());
  }
  public static Timestamp getNextMonthFirstDay() {
    java.util.Calendar calendar = java.util.Calendar.getInstance();
    calendar.set(Integer.parseInt(DateUtil.getYYYY()),Integer.parseInt(DateUtil.getMM()),1,0,0,0);
    calendar.add(java.util.Calendar.MONTH,0);
    return new Timestamp(calendar.getTime().getTime());
  }
  /************************私有方法************************/
  private static String getFM(String flag,java.util.Date date){
    java.util.Date currentDate = date;
    java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat (flag,Locale.getDefault());
    String result = formatter.format(currentDate);
    return result;
  }
  public static void main(String[] args) {
    System.out.println(DateUtil.getYYYYMMDDHHMISS(new Timestamp(System.currentTimeMillis()+60*1000*30)));
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?