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);
|
|||
|
|
}
|
|||
|
|
}
|