时间日期操作

SimpleDateFormat函数语法:
  G 年代标志符
  y 年
  M 月
  d 日
  h 时 在上午或下午 (1~12)
  H 时 在一天中 (0~23)
  m 分
  s 秒
  S 毫秒
  E 星期
  D 一年中的第几天
  F 一月中第几个星期几
  w 一年中第几个星期
  W 一月中第几个星期
  a 上午 / 下午 标记符 
  k 时 在一天中 (1~24)
  K 时 在上午或下午 (0~11)
  z 时区

1.获取当前时间的时间戳

方式一:

long time = System.currentTimeMillis();

方式二:

Date date = new Date();
long time = date.getTime();

方式三:

Calendar calendar = Calendar.getInstance();
long time = calendar.getTimeInMillis();

方式四:

Clock clock = Clock.systemUTC();
long time = clock.millis();

2.获取当前客户端时间

Date date = new Date();  

示例:Tue May 26 16:10:39 CST 2020

3.字符串转日期

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String str = "2020/05/26 19:20:00";
        try {
            Date date1 = sdf.parse(str);
            System.out.println(date1);
        } catch (ParseException e) {
            e.printStackTrace();
        }

结果:Tue May 26 19:20:00 CST 2020

4.日期转字符串

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date now = new Date();
        String str = sdf.format(now);
        System.out.println(str);  

 结果:2020-05-26

5.日期比较

直接用Date自带方法before()和after()比较

String startDate = "2020-05-23";
String endDate = "2020-05-25";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date sd1 = sdf.parse(startDate);
Date sd2 = sdf.parse(endDate);
System.out.println(sd1.before(sd2));//true
System.out.println(sd1.after(sd2));//false
} catch (ParseException e) {
e.printStackTrace();
}

用String的compareTo()方法比较

String startDate = "2020-05-23";
String endDate
= "2020-05-25"; if(startDate.compareTo(endDate)< 0){ System.out.println("开始日期小于结束日期!"); }else { System.out.println("开始日期大于结束日期!"); }

输出:开始日期小于结束日期!

使用Date日期的getTime()方法转换为秒数后比较

Date date1 = new Date();
        Date date2 = new Date(System.currentTimeMillis() - 100);//当前时间的100秒前
        if(date1.getTime() > date2.getTime()){
            System.out.println("date1 大于 date2");
        } 

输出: date1 大于 date2

5.MySQL日期相关

见:https://www.cnblogs.com/zhukf/p/11956270.html

6.判断两个日期年份月份是否相同

public static boolean isSameDate(Date date1, Date date2) {
           try {
            Calendar cal1 = Calendar.getInstance();
               cal1.setTime(date1);

               Calendar cal2 = Calendar.getInstance();
               cal2.setTime(date2);

               boolean isSameYear = cal1.get(Calendar.YEAR) == cal2
                       .get(Calendar.YEAR);
               boolean isSameMonth = isSameYear
                       && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
               boolean isSameDate = isSameMonth
                       && cal1.get(Calendar.DAY_OF_MONTH) == cal2
                               .get(Calendar.DAY_OF_MONTH);

               return isSameDate;
        } catch (Exception e) {
            log.error("[RatingEngine] error occurred: ERROR ", e);
        }
        return false;

       }
转自:https://blog.csdn.net/qq_33366229/article/details/78256962  

 Calendar是一个抽象类,所以不能实例化,但是可以调用getInstance()静态方法获得Calendar实例

//调用静态方法获取Calendar实例(使用默认的TimeZone和Locale)
Calendar calendar1 = Calendar.getInstance();
     // 获取时间戳(13位),毫秒
    long timeStamp = calendar1.getTimeInMillis();
 
    // 获取Date对象
    Date date1 = calendar1.getTime();

    // 设置时间
    Date date2 = new Date(System.currentTimeMillis() - 100);
    calendar1.setTime(date2);

    // 获取Calendar的字段值(比如YEAR、MONTH....)
    final int month = calendar1.get(Calendar.MONTH);
    System.out.println(month);  // 注意,month从0开始计算,9月返回8

    // 修改时间(为指定字段进行计算)
    calendar1.add(Calendar.YEAR, -1);   // 当前是2019年,这里将年份减1
    System.out.println(calendar1.get(Calendar.YEAR)); // 2018

    // 其他字段,比如月、天、时分秒的计算都是一样的做法
    // 获取某个字段的最大值(同样可以有对应的接口获取最小值)
    int maxDay = calendar1.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println(maxDay);  // 2018年9月,最多有30天
    Calendar calendar2 = Calendar.getInstance();

    // 设置指定字段值,注意,月份是从0开始计数
    calendar2.set(Calendar.YEAR, 2030);

    // 设置年月日
    calendar2.set(2029115);
    System.out.println(calendar2.getTime());
    // Wed Dec 05 18:06:30 CST 2029

    // 设置年月日时分秒
    calendar2.set(2030,104125859);
原文地址:https://www.cnblogs.com/zhukf/p/12966387.html