173 lines
5.1 KiB
Java
173 lines
5.1 KiB
Java
package com.nis.util;
|
||
|
||
import java.text.ParseException;
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.Calendar;
|
||
import java.util.Date;
|
||
|
||
/**
|
||
* 常用日历操作辅助类
|
||
*
|
||
*/
|
||
public class CalendarUtils {
|
||
/**
|
||
* //小时报2018-08-01 12:00:00 //日报2018-08-15 00:00:00 //月报2018-08-01 00:00:00
|
||
*/
|
||
static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||
static final SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||
static final SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
||
static final SimpleDateFormat format4 = new SimpleDateFormat("yyyy-MM-dd HH");
|
||
static final SimpleDateFormat UTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
|
||
|
||
/**
|
||
* 获得当前小时或者前一个小时 0/-1
|
||
*
|
||
* @throws ParseException
|
||
*/
|
||
public static Date getPrevOneHourTime(int num) {
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.add(Calendar.HOUR, num);
|
||
String format5 = format4.format(calendar.getTime());
|
||
format5 += ":00:00";
|
||
Date parse = null;
|
||
try {
|
||
parse = format2.parse(format5);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
return parse;
|
||
}
|
||
|
||
/**
|
||
* 获取time时间的前整5分钟的时间点 eg: 2018-12-12 12:06:36 结果为:2018-12-12 12:05:00
|
||
* 2018-12-12 12:04:36 结果为:2018-12-12 12:00:00
|
||
*
|
||
* 传入0 获得当前时间最近的5分钟刻度时间 传入 -5 获得当前时间最近的5分钟刻度时间的前5分钟
|
||
*
|
||
* @param time
|
||
* @return 取前一个5分钟的时间,若返回为null则检查传入的string类型时间格式
|
||
*/
|
||
public static Date getRangeOf5min(int num) {
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.setTime(new Date());
|
||
Date date = calendar.getTime();
|
||
Date parse = null;
|
||
String time = null;
|
||
|
||
if (date != null) {
|
||
time = format2.format(date);
|
||
} else {
|
||
return null;
|
||
}
|
||
int length = time.length();
|
||
int cut = 4;
|
||
if (length <= cut) {
|
||
return null;
|
||
}
|
||
int max = 5;
|
||
// 获取分钟数的个位
|
||
int compare;
|
||
try {
|
||
compare = Integer.parseInt(time.substring(length - cut, length - cut + 1));
|
||
time = time.substring(0, length - cut);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
return null;
|
||
}
|
||
if (compare >= 0 && compare < max) {
|
||
time = time.concat("0:00");
|
||
} else if (compare >= max) {
|
||
time = time.concat("5:00");
|
||
}
|
||
|
||
if (num == -5) {
|
||
Date parse1 = null;
|
||
try {
|
||
parse1 = format2.parse(time);
|
||
} catch (ParseException e) {
|
||
e.printStackTrace();
|
||
return null;
|
||
}
|
||
calendar.setTime(parse1);
|
||
calendar.add(Calendar.MINUTE, num);
|
||
calendar.set(Calendar.SECOND, 0);
|
||
return calendar.getTime();
|
||
}
|
||
|
||
try {
|
||
parse = format2.parse(time);
|
||
} catch (ParseException e) {
|
||
e.printStackTrace();
|
||
return null;
|
||
}
|
||
return parse;
|
||
}
|
||
|
||
/**
|
||
* 根据传参获得当天的0点或者前一天的0点(0/当天.-24/前一天)
|
||
*
|
||
* @param times
|
||
* @return
|
||
*/
|
||
public static Date getTPrevHour(Date date, int times) {
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.setTime(date);
|
||
calendar.add(Calendar.HOUR_OF_DAY, times);
|
||
return calendar.getTime();
|
||
}
|
||
|
||
/**
|
||
* local时间转换成UTC时间
|
||
*
|
||
* @param localTime
|
||
* @return
|
||
*/
|
||
public static String localToUTC(Date localTime) {
|
||
Date localDate = null;
|
||
if (null != localTime) {
|
||
localDate = localTime;
|
||
}
|
||
long localTimeInMillis = localDate.getTime();
|
||
/** long时间转换成Calendar */
|
||
Calendar calendar = Calendar.getInstance();
|
||
calendar.setTimeInMillis(localTimeInMillis);
|
||
/** 取得时间偏移量 */
|
||
int zoneOffset = calendar.get(java.util.Calendar.ZONE_OFFSET);
|
||
/** 取得夏令时差 */
|
||
int dstOffset = calendar.get(java.util.Calendar.DST_OFFSET);
|
||
/** 从本地时间里扣除这些差量,即可以取得UTC时间 */
|
||
calendar.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
|
||
/** 取得的时间就是UTC标准时间 */
|
||
Date utcDate = new Date(calendar.getTimeInMillis());
|
||
String utcTime = UTC.format(utcDate);
|
||
return utcTime;
|
||
}
|
||
|
||
public static void main(String[] args) throws ParseException {
|
||
|
||
Date endtime = CalendarUtils.getRangeOf5min(0);
|
||
Date startTime = CalendarUtils.getTPrevHour(endtime, -2);
|
||
//
|
||
// long startTimes = startTime.getTime();
|
||
// long endTimes = endtime.getTime();
|
||
//
|
||
// System.out.println("now:" + format2.format(new Date()));
|
||
System.out.println("start:" + format2.format(startTime));
|
||
System.out.println("end:" + format2.format(endtime));
|
||
System.out.println(endtime.compareTo(startTime));
|
||
System.out.println(format2.parse("2018-12-10 14:15:00").compareTo(endtime));
|
||
//
|
||
// // System.out.println(startTimes);
|
||
// // System.out.println(endTimes);
|
||
// // System.out.println((endTimes - startTimes) / 300000);
|
||
// int n = 0;
|
||
// for (; startTimes <= (endTimes - 300000); startTimes += 300000) {
|
||
// n++;
|
||
// System.out.println(format2.format(new Date(startTimes)));
|
||
// System.out.println(format2.format(new Date((startTimes + 300000))));
|
||
// System.out.println("---");
|
||
// }
|
||
// System.out.println(n);
|
||
}
|
||
}
|