JAVA中关于获取时间(日期)的总结大全

xiaoxiao2025-07-11  12

[html] view plain copy java.util.Date  java.sql.Date    java.sql.Time    java.sql.Timestamp  java.text.SimpleDateFormat  java.util.Calendar  

常用的也就是下面的几个:

[html] view plain copy Date:          getTime() 、setTime()  DateFormat:           getInstance()、getDateInstance()、getDateTimeInstance()、getTimeInstance()  SimpleDateFormate:    Formate(Date)、 parse(String s)  Calendar:        getInstance()、set() 、get()、getActualMaximum()、add()、gettime()、setTime(Date)  

下面分别对他们介绍下:

(1)、java.util.Date 

java.util.Date 是java.sqlDate,Time,Timestamp的父类,Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒。是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,它们都被java.util.Calendar类所取代

(2)、java.text.DateFormat(抽象类) 

       DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年1 月 1 日 00:00:00 这一刻开始的毫秒数。 不过DateFormat的格式化Date的功能有限,没有SimpleDateFormat强大;但DateFormat是SimpleDateFormat的父类。

(3)、java.text.SimpleDateFormat  (DateFormat的直接子类) 

 SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。

       SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。 

日期格式字符串如下:

常见的转换有两种:

将Date格式化为String    String format(Date d) 将String解析为Date    Date   parse(String s)

(4)、java.util.Calendar(抽象类) 

       java.util.Calendar 类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。

       Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

         与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。    

二、示例

大概可以分为以下五大类:

(A)、日期取值

1.1、获取当前系统时间(毫秒数)

[html] view plain copy //方式一  Date date = new Date();  System.out.println(date.getTime());    //方式二  System.out.println(System.currentTimeMillis());    //转换成指定的格式  String current = df.format(System.currentTimeMillis());  System.out.println(current);             输出如下:  1513749728479  1513749728480  2017-12-20 14:02:08   

(B)、日期转换

2.1、日期转字符串、字符串转日期

[html] view plain copy SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  try {      //1、日期转字符串      Calendar calendar = Calendar.getInstance();      Date date = calendar.getTime();      String dateStringParse = sdf.format(date);      System.out.println(dateStringParse);      //2、字符串转日期      String dateString = "2017-12-20 14:02:08";      Date dateParse = sdf.parse(dateString);      System.out.println(dateParse);  } catch (ParseException e) {      e.printStackTrace();  }        

注意: -创建 SimpleDateFormat 对象时必须指定转换格式。 -转换格式区分大小写,yyyy 代表年份,MM 代表月份,dd 代表日期,HH 代表 24 进制的小时,hh 代表 12 进制的小时,mm 代表分钟,ss 代表秒。

2.2、将日期转换成中文年月日时分秒

[html] view plain copy SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");  try {      Date date = new Date();      String dateStringParse = sdf.format(date);      System.out.println(dateStringParse);  } catch (Exception e) {      e.printStackTrace();  }  

2.3、将指定日期转换成带周的格式

[html] view plain copy DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  Date d1 = df.parse("2017-12-20 12:19:19");  //指定日期  Calendar cal = df.getCalendar();  //当前时间  Calendar cas = Calendar.getInstance();  int year = cal.get(Calendar.YEAR);//获取年份  int month=cal.get(Calendar.MONTH);//获取月份  int day=cal.get(Calendar.DATE);//获取日  int hour=cal.get(Calendar.HOUR);//小时  int minute=cal.get(Calendar.MINUTE);//分  int second=cal.get(Calendar.SECOND);//秒  int WeekOfYear = cal.get(Calendar.DAY_OF_WEEK);//一周的第几天  System.out.println("现在的时间是:公元"+year+"年"+month+"月"+day+"日      "+hour+"时"+minute+"分"+second+"秒     星期"+WeekOfYear);   2.4、获取当前时间显示,上午,下午

[html] view plain copy Date date = new Date();  DateFormat df1 = DateFormat.getDateInstance();//日期格式,精确到日  System.out.println(df1.format(date));  DateFormat df2 = DateFormat.getDateTimeInstance();//可以精确到时分秒  System.out.println(df2.format(date));  DateFormat df3 = DateFormat.getTimeInstance();//只显示出时分秒  System.out.println("只显示出时分秒:"+df3.format(date));  DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //显示日期,周,上下午,时间(精确到秒)  System.out.println("显示日期,周,上下午,时间(精确到秒):"+df4.format(date));  DateFormat df5 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //显示日期,上下午,时间(精确到秒)  System.out.println("显示日期,上下午,时间(精确到秒):"+df5.format(date));  DateFormat df6 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //显示日期,上下午,时间(精确到分)  System.out.println("显示日期,上下午,时间(精确到分):"+df6.format(date));  DateFormat df7 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); //显示日期,时间(精确到分)  System.out.println("显示日期,时间(精确到分):"+df7.format(date));  

2.5、时间秒转化为多少天小时分秒

[html] view plain copy /**         * 秒转化为天小时分秒字符串         *         * @param seconds         * @return String         */          public static String formatSeconds(long seconds) {              String timeStr = seconds + "秒";              if (seconds > 60) {                  long second = seconds % 60;                  long min = seconds / 60;                  timeStr = min + "分" + second + "秒";                  if (min > 60) {                      min = (seconds / 60) % 60;                      long hour = (seconds / 60) / 60;                      timeStr = hour + "小时" + min + "分" + second + "秒";                      if (hour > 24) {                          hour = ((seconds / 60) / 60) % 24;                          long day = (((seconds / 60) / 60) / 24);                          timeStr = day + "天" + hour + "小时" + min + "分" + second + "秒";                      }                  }              }              return timeStr;       }      

(C)、设置时间

Calendar.getInstance().getTime()即可获取一个Date对象 Calendar.getInstance().add(时间的一个部分,正数代表加,负数代表减)

推荐 使用java.util.Calendar类来进行操作,因为java.util.Date类很多方法都过时了,Calendar 类有很多重载的设置时间的方法,可以针对于某一项进行设置,也可以同时进行很多设置

[html] view plain copy set(int field, int value) 将给定的日历字段设置为给定值。  void    set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。  void    set(int year, int month, int date, int hourOfDay, int minute) 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。  void    set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。   第一个就是给特定的字段设值,后面三个就是针对多个字段赋值

(D)、日期加减

通常来说,我们会对日期做两种加减操作: 一、以某个日期为基准,计算其几天前/后、几年前/后,或者其他时间单位前后的日期

A、获取当前时间的前一年时间

[html] view plain copy //根据现在时间计算  Calendar now = Calendar.getInstance();  now.add(Calendar.YEAR, 1); //现在时间是1年后  print(now);  now.add(Calendar.YEAR, -1); //现在时间是1年前  print(now);    //根据某个特定的时间 date (Date 型) 计算  Calendar specialDate = Calendar.getInstance();  specialDate.setTime(new Date()); //注意在此处将 specialDate 的值改为特定日期  specialDate.add(Calendar.YEAR, 1); //特定时间的1年后  print(specialDate);  specialDate.add(Calendar.YEAR, -1); //特定时间的1年前  print(specialDate);    打印Calendar的方法为:

[html] view plain copy public void print(Calendar specialDate){      System.out.println(specialDate.get(Calendar.YEAR)+"年"+(specialDate.get(Calendar.MONTH)+1)+              "月"+specialDate.get(Calendar.DAY_OF_MONTH)+"日"+specialDate.get(Calendar.HOUR_OF_DAY)+              ":"+specialDate.get(Calendar.MINUTE)+":"+specialDate.get(Calendar.SECOND));  }        

使用了 Calendar 对象的 add 方法,可以更改 Calendar.YEAR 为任意时间单位字段,完成各种时间单位下的日期计算。

B、根据时间然后对小时,分钟,秒数进行相加

[html] view plain copy //取当前的时分-30  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");  Calendar nowTime2 = Calendar.getInstance();  nowTime2.add(Calendar.MINUTE, -30);//30分钟前的时间  String currentTime = df.format(nowTime2.getTime());  System.out.println("30分钟前的时间" + currentTime);    //取当前小时减一个小时  Calendar calendar = Calendar.getInstance();  calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);  SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd HH");  System.out.println("一个小时前的时间:" + dff.format(calendar.getTime()));  System.out.println("当前的时间:" + dff.format(new Date()));    //取当前的时分+5  Calendar nowTime = Calendar.getInstance();  nowTime.add(Calendar.MINUTE, 5);  String currentTimes = df.format(nowTime.getTime());  System.out.println("当前时间加5分钟" +currentTimes);    //前一天的时间  Date dNow = new Date();   //当前时间  Calendar calendars = Calendar.getInstance(); //得到日历  calendars.setTime(dNow);//把当前时间赋给日历  calendars.add(Calendar.DAY_OF_MONTH, -1);  //设置为前一天  Date dBefore = calendars.getTime();   //得到前一天的时间    String defaultStartDate = df.format(dBefore);    //格式化前一天  String defaultEndDate = df.format(dNow); //格式化当前时间    System.out.println("前一天的时间是:" + defaultStartDate);  System.out.println("生成的时间是:" + defaultEndDate);   C、对时分秒进行累计,比如说视频通话,第一次,通了10分钟,第二次就得把上次的时间进行累计。

[html] view plain copy DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  //上次挂断电话时间  Date d1 = df.parse("2017-12-20 12:19:19");  //这次通话时长  Date d2 = df.parse("2017-12-20 11:40:34");  long nd = 1000 * 24 * 60 * 60;  long nh = 1000 * 60 * 60;  long nm = 1000 * 60;  long ns = 1000;  // 获得两个时间的毫秒时间差异  long diff = d1.getTime() - d2.getTime();  // 计算差多少天  long day = diff / nd;  // 计算差多少小时  long hour = diff % nd / nh;  // 计算差多少分钟  long min = diff % nd % nh / nm;  // 计算差多少秒/输出结果  long sec = diff % nd % nh % nm / ns;  //根据上次挂断电话时间然后得出这次通话时长  System.out.println(day + "天" + hour + "小时" + min + "分钟"+ sec + "秒");    //累计通话时长  String cur = "10:15:12";  SimpleDateFormat myFormatter = new SimpleDateFormat("HH:mm:ss");  Calendar cal = Calendar.getInstance();  cal.setTime(myFormatter.parse(cur));  int shi = (int)cal.get(Calendar.HOUR_OF_DAY)+(int)hour;  int fendo = (int)cal.get(Calendar.MINUTE)+(int)min;  int miao = (int)cal.get(Calendar.SECOND)+(int)sec;    //以下算法有些问题  if(miao>60){      miao=00;      if(fendo>60){          fendo = 00;          shi = shi+1;      }else {          fendo = fendo + 1;      }  }  System.out.println(shi+":"+fendo+":"+miao);  

二、计算两个时间的间隔

A、例如计算 2017 年 1 月 1 日距离现在有多少天。  

[html] view plain copy SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  String dateString = "2017-01-01 11:11:11";  Calendar calendar = Calendar.getInstance();  long nowDate = calendar.getTime().getTime(); //Date.getTime() 获得毫秒型日期  try {      long specialDate = sdf.parse(dateString).getTime();      long betweenDate = (specialDate - nowDate) / (1000 * 60 * 60 * 24); //计算间隔多少天,则除以毫秒到天的转换公式      System.out.print(betweenDate);  } catch (ParseException e) {      e.printStackTrace();  }  

B、求出两个日期相差多少小时,分钟,毫秒

[html] view plain copy DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  Date d1 = df.parse("2017-12-20 12:19:19");  Date d2 = df.parse("2017-12-20 11:40:34");  long nd = 1000 * 24 * 60 * 60;  long nh = 1000 * 60 * 60;  long nm = 1000 * 60;  long ns = 1000;  // 获得两个时间的毫秒时间差异  long diff = d1.getTime() - d2.getTime();  // 计算差多少天  long day = diff / nd;  // 计算差多少小时  long hour = diff % nd / nh;  // 计算差多少分钟  long min = diff % nd % nh / nm;  // 计算差多少秒//输出结果  long sec = diff % nd % nh % nm / ns;  System.out.println(day + "天" + hour + "小时" + min + "分钟"+ sec + "秒");  

(E)、日期比较

日期比较一般有两种方法,对于 java.util.Date 或者 java.util.Calendar 都是通用的。一种是通过 after() 与 before() 方法进行比较,一种是通过 compareTo() 方法进行比较。

[html] view plain copy SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  String dateString_01 = "2017-12-20 11:11:11";  String dateString_02 = "2017-12-21 11:11:11";  try {      Date date_01 = sdf.parse(dateString_01);      Date date_02 = sdf.parse(dateString_02);      System.out.println(date_01.before(date_02)); //true,当 date_01 小于 date_02 时,为 true,否则为 false      System.out.println(date_02.after(date_01)); //true,当 date_02 大于 date_01 时,为 true,否则为 false      System.out.println(date_01.compareTo(date_02)); //-1,当 date_01 小于 date_02 时,为 -1      System.out.println(date_02.compareTo(date_01)); //1,当 date_02 大于 date_01 时,为 1      System.out.println(date_02.compareTo(date_02)); //0,当两个日期相等时,为 0  } catch (ParseException e) {      e.printStackTrace();  }  

三、工具类

网上找的一个工具类: [html] view plain copy /**   * projectName: xxxx   * fileName: DateUtil.java   * packageName: test   * date: 2017-12-20 15:36   * copyright(c) 2017-2020 xxx公司   */  package test;    import java.sql.Timestamp;  import java.text.ParseException;  import java.text.ParsePosition;  import java.text.SimpleDateFormat;  import java.util.*;    /**   * @version: V1.0   * @author: fendo   * @className: DateUtil   * @packageName: test   * @description: 时间操作工具类   * @data: 2017-12-20 15:36   **/  public class DateUtil {        public static String pattern="yyyy-MM-dd";      public static SimpleDateFormat formatter = new SimpleDateFormat(pattern);      public static SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        /**       * 获取现在时间       *       * @return 返回时间类型 yyyy-MM-dd HH:mm:ss       */      public static Date getNowDate() {          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          String dateString = formatter.format(new Date());          ParsePosition pos = new ParsePosition(8);          Date currentTime_2 = formatter.parse(dateString, pos);          return currentTime_2;      }        /**       * 获取现在时间       *       * @return返回短时间格式 yyyy-MM-dd       */      public static Date getNowDateShort() {          String dateString = formatter.format(new Date());          ParsePosition pos = new ParsePosition(8);          Date currentTime_2 = formatter.parse(dateString, pos);          return currentTime_2;      }        /**       * 获取现在时间       *       * @return返回字符串格式 yyyy-MM-dd HH:mm:ss       */      public static String getStringDate() {          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          String dateString = formatter.format(new Date());          return dateString;      }      /**       * 获取现在时间       * @return返回字符串格式 yyyyMMddHHmmss       */      public static String getStringAllDate() {          SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS");          String dateString = formatter.format(new Date());          return dateString;      }      /**       * 获取现在时间       *       * @return 返回短时间字符串格式yyyy-MM-dd       */      public static String getStringDateShort() {          String dateString = formatter.format( new Date());          return dateString;      }        /**       * 获取时间 小时:分;秒 HH:mm:ss       *       * @return       */      public static String getTimeShort() {          SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");          String dateString = formatter.format(new Date());          return dateString;      }        /**       * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss       *       * @param strDate       * @return       */      public static Date strToDateLong(String strDate) {          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          ParsePosition pos = new ParsePosition(0);          Date strtodate = formatter.parse(strDate, pos);          return strtodate;      }        /**       * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss       *       * @param dateDate       * @return       */      public static String dateToStrLong(java.util.Date dateDate) {          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          String dateString = formatter.format(dateDate);          return dateString;      }        /**       * 将短时间格式时间转换为字符串 yyyy-MM-dd       *       * @param dateDate       * @return       */      public static String dateToStr(Date dateDate) {          String dateString = formatter.format(dateDate);          return dateString;      }          /**       * 将短时间格式字符串转换为时间 yyyy-MM-dd       *       * @param strDate       * @return       */      public static Date strToDate(String strDate) {          ParsePosition pos = new ParsePosition(0);          Date strtodate = formatter.parse(strDate, pos);          return strtodate;      }        /**       * 将短时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss       *       * @param strDate       * @return       */      public static Timestamp strToDateSql(String strDate) {          ParsePosition pos = new ParsePosition(0);          Date strtodate = formatter2.parse(strDate, pos);          return new Timestamp(strtodate.getTime());      }      /**       * 得到现在时间       *       * @return       */      public static Date getNow() {          Date currentTime = new Date();          return currentTime;      }        /**       * 提取一个月中的最后一天       *       * @param day       * @return       */      public static Date getLastDate(long day) {          Date date = new Date();          long date_3_hm = date.getTime() - 3600000 * 34 * day;          Date date_3_hm_date = new Date(date_3_hm);          return date_3_hm_date;      }        /**       * 得到现在时间       *       * @return 字符串 yyyyMMdd HHmmss       */      public static String getStringToday() {          Date currentTime = new Date();          SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");          String dateString = formatter.format(currentTime);          return dateString;      }      /**       *       * 功能:<br/>       *       * @author Tony       * @version 2016年12月16日 下午4:41:51 <br/>       */      public static String getTodayShort() {          Date currentTime = new Date();          SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");          String dateString = formatter.format(currentTime);          return dateString;      }      /**       *       * @Description: 输入一个整数类型的字符串,然后转换成时分秒的形式输出       *    例如:输入568       *          返回结果为:00:09:28       *          输入null或者“”       *          返回结果为:00:00:00       * @param @param value       * @param @return       * @return String       * @throws       * @author Tony 鬼手卡卡       * @date 2016-4-20       */      public static String getHHMMSS(String value){          String hour="00";          String minute="00";          String second="00";          if(value!=null&&!value.trim().equals("")){              int v_int=Integer.valueOf(value);              hour=v_int/3600+"";//获得小时;              minute=v_int%3600/60+"";//获得小时;              second=v_int%3600%60+"";//获得小时;          }          return (hour.length()>1?hour:"0"+hour)+":"+(minute.length()>1?minute:"0"+minute)+":"+(second.length()>1?second:"0"+second);      }      /**       * 得到现在小时       */      public static String getHour() {          Date currentTime = new Date();          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          String dateString = formatter.format(currentTime);          String hour;          hour = dateString.substring(11, 13);          return hour;      }        /**       * 得到现在分钟       *       * @return       */      public static String getTime() {          Date currentTime = new Date();          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          String dateString = formatter.format(currentTime);          String min;          min = dateString.substring(14, 16);          return min;      }        /**       * 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写。       *       * @param sformat       *            yyyyMMddhhmmss       * @return       */      public static String getUserDate(String sformat) {          Date currentTime = new Date();          SimpleDateFormat formatter = new SimpleDateFormat(sformat);          String dateString = formatter.format(currentTime);          return dateString;      }        /**       * 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式,返回字符型的分钟       */      public static String getTwoHour(String st1, String st2) {          String[] kk = null;          String[] jj = null;          kk = st1.split(":");          jj = st2.split(":");          if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))              return "0";          else {              double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;              double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;              if ((y - u) > 0)                  return y - u + "";              else                  return "0";          }      }        /**       * 得到二个日期间的间隔天数       */      public static String getTwoDay(String sj1, String sj2) {          long day = 0;          try {              java.util.Date date = formatter.parse(sj1);              java.util.Date mydate = formatter.parse(sj2);              day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);          } catch (Exception e) {              return "";          }          return day + "";      }        /**       * 时间前推或后推分钟,其中JJ表示分钟.       */      public static String getPreTime(String sj1, String jj) {          SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          String mydate1 = "";          try {              Date date1 = format.parse(sj1);              long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;              date1.setTime(Time * 1000);              mydate1 = format.format(date1);          } catch (Exception e) {          }          return mydate1;      }        /**       * 得到一个时间延后或前移几天的时间,nowdate(yyyy-mm-dd)为时间,delay为前移或后延的天数       */      public static String getNextDay(String nowdate, String delay) {          try{              String mdate = "";              Date d = strToDate(nowdate);              long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;              d.setTime(myTime * 1000);              mdate = formatter.format(d);              return mdate;          }catch(Exception e){              return "";          }      }      /**       *       * 功能:<br/> 距离现在几天的时间是多少       * 获得一个时间字符串,格式为:yyyy-MM-dd HH:mm:ss       * day  如果为整数,表示未来时间       *      如果为负数,表示过去时间       * @author Tony       * @version 2016年11月29日 上午11:02:56 <br/>       */      public static String getFromNow(int day) {          Date date = new Date();          long dateTime = (date.getTime() / 1000) + day * 24 * 60 * 60;          date.setTime(dateTime * 1000);          return formatter2.format(date);      }      /**       * 判断是否润年       *       * @param ddate       * @return       */      public static boolean isLeapYear(String ddate) {            /**           * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年           * 3.能被4整除同时能被100整除则不是闰年           */          Date d = strToDate(ddate);          GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();          gc.setTime(d);          int year = gc.get(Calendar.YEAR);          if ((year % 400) == 0)              return true;          else if ((year % 4) == 0) {              if ((year % 100) == 0)                  return false;              else                  return true;          } else              return false;      }        /**       * 返回美国时间格式 26 Apr 2006       *       * @param str       * @return       */      public static String getEDate(String str) {          ParsePosition pos = new ParsePosition(0);          Date strtodate = formatter.parse(str, pos);          String j = strtodate.toString();          String[] k = j.split(" ");          return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);      }        /**       * 获取一个月的最后一天       *       * @param dat       * @return       */      public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd          String str = dat.substring(0, 8);          String month = dat.substring(5, 7);          int mon = Integer.parseInt(month);          if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {              str += "31";          } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {              str += "30";          } else {              if (isLeapYear(dat)) {                  str += "29";              } else {                  str += "28";              }          }          return str;      }        /**       * 判断二个时间是否在同一个周       *       * @param date1       * @param date2       * @return       */      public static boolean isSameWeekDates(Date date1, Date date2) {          Calendar cal1 = Calendar.getInstance();          Calendar cal2 = Calendar.getInstance();          cal1.setTime(date1);          cal2.setTime(date2);          int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);          if (0 == subYear) {              if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))                  return true;          } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {              // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周              if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))                  return true;          } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {              if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))                  return true;          }          return false;      }        /**       * 产生周序列,即得到当前时间所在的年度是第几周       *       * @return       */      public static String getSeqWeek() {          Calendar c = Calendar.getInstance(Locale.CHINA);          String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));          if (week.length() == 1)              week = "0" + week;          String year = Integer.toString(c.get(Calendar.YEAR));          return year + week;      }        /**       * 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号       *       * @param sdate       * @param num       * @return       */      public static String getWeek(String sdate, String num) {          // 再转换为时间          Date dd = DateUtil.strToDate(sdate);          Calendar c = Calendar.getInstance();          c.setTime(dd);          if (num.equals("1")) // 返回星期一所在的日期              c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);          else if (num.equals("2")) // 返回星期二所在的日期              c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);          else if (num.equals("3")) // 返回星期三所在的日期              c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);          else if (num.equals("4")) // 返回星期四所在的日期              c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);          else if (num.equals("5")) // 返回星期五所在的日期              c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);          else if (num.equals("6")) // 返回星期六所在的日期              c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);          else if (num.equals("0")) // 返回星期日所在的日期              c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);          return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());      }        /**       * 根据一个日期,返回是星期几的字符串       *       * @param sdate       * @return       */      public static String getWeek(String sdate) {          // 再转换为时间          Date date = DateUtil.strToDate(sdate);          Calendar c = Calendar.getInstance();          c.setTime(date);          // int hour=c.get(Calendar.DAY_OF_WEEK);          // hour中存的就是星期几了,其范围 1~7          // 1=星期日 7=星期六,其他类推          return new SimpleDateFormat("EEEE").format(c.getTime());      }      public static String getWeekStr(String sdate){          String str = "";          str = DateUtil.getWeek(sdate);          if("1".equals(str)){              str = "星期日";          }else if("2".equals(str)){              str = "星期一";          }else if("3".equals(str)){              str = "星期二";          }else if("4".equals(str)){              str = "星期三";          }else if("5".equals(str)){              str = "星期四";          }else if("6".equals(str)){              str = "星期五";          }else if("7".equals(str)){              str = "星期六";          }          return str;      }        /**       * 两个时间之间的天数       *       * @param date1       * @param date2       * @return       */      public static long getDays(String date1, String date2) {          if (date1 == null || date1.equals(""))              return 0;          if (date2 == null || date2.equals(""))              return 0;          // 转换为标准时间          java.util.Date date = null;          java.util.Date mydate = null;          try {              date = formatter.parse(date1);              mydate = formatter.parse(date2);          } catch (Exception e) {          }          long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);          return day;      }        /**       * 形成如下的日历 , 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间       * 此函数返回该日历第一行星期日所在的日期       *       * @param sdate       * @return       */      public static String getNowMonth(String sdate) {          // 取该时间所在月的一号          sdate = sdate.substring(0, 8) + "01";            // 得到这个月的1号是星期几          Date date = DateUtil.strToDate(sdate);          Calendar c = Calendar.getInstance();          c.setTime(date);          int u = c.get(Calendar.DAY_OF_WEEK);          String newday = DateUtil.getNextDay(sdate, (1 - u) + "");          return newday;      }        /**       * 取得数据库主键 生成格式为yyyymmddhhmmss+k位随机数       *       * @param k       *            表示是取几位随机数,可以自己定       */        public static String getNo(int k) {            return getUserDate("yyyyMMddhhmmss") + getRandom(k);      }        /**       * 返回一个随机数       *       * @param i       * @return       */      public static String getRandom(int i) {          Random jjj = new Random();          if (i == 0)              return "";          String jj = "";          for (int k = 0; k < i; k++) {              jj = jj + jjj.nextInt(9);          }          return jj;      }        public static boolean RightDate(String date) {          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");          if (date == null)              return false;          if (date.length() > 10) {              sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");          } else {              sdf = new SimpleDateFormat("yyyy-MM-dd");          }          try {              sdf.parse(date);          } catch (ParseException pe) {              return false;          }          return true;      }        /***************************************************************************       * //nd=1表示返回的值中包含年度 //yf=1表示返回的值中包含月份 //rq=1表示返回的值中包含日期 //format表示返回的格式 1       * 以年月日中文返回 2 以横线-返回 // 3 以斜线/返回 4 以缩写不带其它符号形式返回 // 5 以点号.返回       **************************************************************************/      public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) {          Date currentTime = new Date();          String dateString = formatter.format(currentTime);          String s_nd = dateString.substring(0, 4); // 年份          String s_yf = dateString.substring(5, 7); // 月份          String s_rq = dateString.substring(8, 10); // 日期          String sreturn = "";          //roc.util.MyChar mc = new roc.util.MyChar();          //if (sdate == null || sdate.equals("") || !mc.Isdate(sdate)) { // 处理空值情况          if (sdate == null || sdate.equals("")){              if (nd.equals("1")) {                  sreturn = s_nd;                  // 处理间隔符                  if (format.equals("1"))                      sreturn = sreturn + "年";                  else if (format.equals("2"))                      sreturn = sreturn + "-";                  else if (format.equals("3"))                      sreturn = sreturn + "/";                  else if (format.equals("5"))                      sreturn = sreturn + ".";              }              // 处理月份              if (yf.equals("1")) {                  sreturn = sreturn + s_yf;                  if (format.equals("1"))                      sreturn = sreturn + "月";                  else if (format.equals("2"))                      sreturn = sreturn + "-";                  else if (format.equals("3"))                      sreturn = sreturn + "/";                  else if (format.equals("5"))                      sreturn = sreturn + ".";              }              // 处理日期              if (rq.equals("1")) {                  sreturn = sreturn + s_rq;                  if (format.equals("1"))                      sreturn = sreturn + "日";              }          } else {              // 不是空值,也是一个合法的日期值,则先将其转换为标准的时间格式              sdate = getOKDate(sdate);              s_nd = sdate.substring(0, 4); // 年份              s_yf = sdate.substring(5, 7); // 月份              s_rq = sdate.substring(8, 10); // 日期              if (nd.equals("1")) {                  sreturn = s_nd;                  // 处理间隔符                  if (format.equals("1"))                      sreturn = sreturn + "年";                  else if (format.equals("2"))                      sreturn = sreturn + "-";                  else if (format.equals("3"))                      sreturn = sreturn + "/";                  else if (format.equals("5"))                      sreturn = sreturn + ".";              }              // 处理月份              if (yf.equals("1")) {                  sreturn = sreturn + s_yf;                  if (format.equals("1"))                      sreturn = sreturn + "月";                  else if (format.equals("2"))                      sreturn = sreturn + "-";                  else if (format.equals("3"))                      sreturn = sreturn + "/";                  else if (format.equals("5"))                      sreturn = sreturn + ".";              }              // 处理日期              if (rq.equals("1")) {                  sreturn = sreturn + s_rq;                  if (format.equals("1"))                      sreturn = sreturn + "日";              }          }          return sreturn;      }        public static String getNextMonthDay(String sdate, int m) {          sdate = getOKDate(sdate);          int year = Integer.parseInt(sdate.substring(0, 4));          int month = Integer.parseInt(sdate.substring(5, 7));          month = month + m;          if (month < 0) {              month = month + 12;              year = year - 1;          } else if (month > 12) {              month = month - 12;              year = year + 1;          }          String smonth = "";          if (month < 10)              smonth = "0" + month;          else              smonth = "" + month;          return year + "-" + smonth + "-10";      }        /**       *       * 功能:<br/>       *       * @author Tony       * @version 2015-3-31 上午09:29:31 <br/>       */      public static String getOKDate(String sdate) {          if (sdate == null || sdate.equals(""))              return getStringDateShort();    //    if (!VeStr.Isdate(sdate)) {  //     sdate = getStringDateShort();  //    }  //    // 将“/”转换为“-”  //    sdate = VeStr.Replace(sdate, "/", "-");          // 如果只有8位长度,则要进行转换          if (sdate.length() == 8)              sdate = sdate.substring(0, 4) + "-" + sdate.substring(4, 6) + "-" + sdate.substring(6, 8);          ParsePosition pos = new ParsePosition(0);          Date strtodate = formatter.parse(sdate, pos);          String dateString = formatter.format(strtodate);          return dateString;      }      /**       * 获取当前时间的前一天时间       * @param cl       * @return       */      private static String getBeforeDay(Calendar cl){          //使用roll方法进行向前回滚          //cl.roll(Calendar.DATE, -1);          //使用set方法直接进行设置          // int day = cl.get(Calendar.DATE);          cl.add(Calendar.DATE, -1);          return formatter.format(cl.getTime());      }        /**       * 获取当前时间的后一天时间       * @param cl       * @return       */      private static String getAfterDay(Calendar cl){          //使用roll方法进行回滚到后一天的时间          //cl.roll(Calendar.DATE, 1);          //使用set方法直接设置时间值          //int day = cl.get(Calendar.DATE);          cl.add(Calendar.DATE, 1);          return formatter.format(cl.getTime());      }        private static String getDateAMPM(){          GregorianCalendar ca = new GregorianCalendar();          //结果为“0”是上午     结果为“1”是下午          int i=ca.get(GregorianCalendar.AM_PM);          return i==0?"AM":"PM";      }      private static int compareToDate(String date1,String date2){          return date1.compareTo(date2);      }      private static int compareToDateString(String date1,String date2){          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          int i=0;          try {              long ldate1=formatter.parse(date1).getTime();              long ldate2=formatter.parse(date2).getTime();              if(ldate1>ldate2){                  i=1;              }else if(ldate1==ldate2){                  i=0;              }else{                  i=-1;              }            } catch (ParseException e) {              e.printStackTrace();          }          return i;      }        public static String[] getFiveDate(){          String[] dates=new String[2];          Calendar calendar = Calendar.getInstance();          calendar.setTime(new Date());          String five=" 05:00:00";            if(getDateAMPM().equals("AM")&&compareToDateString(getStringDate(),getStringDateShort()+five)==-1){              dates[0]=getBeforeDay(calendar)+five;              dates[1]=getStringDateShort()+five;          }else{              dates[0]=getStringDateShort()+five;              dates[1]=getAfterDay(calendar)+five;          }            return dates;      }      public static String getFiveDate2(){          Calendar calendar = Calendar.getInstance();          calendar.setTime(new Date());          String five=" 05:00:00";          String reStr="";          if(getDateAMPM().equals("AM")&&compareToDateString(getStringDate(),getStringDateShort()+five)==-1){              reStr=getBeforeDay(calendar);          }else{              reStr=getStringDateShort();          }          return reStr;      }  } 
转载请注明原文地址: https://www.6miu.com/read-5032908.html

最新回复(0)