All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.leopard.burrow.util.DateTime Maven / Gradle / Ivy

package io.leopard.burrow.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期、时间常用方法类.
 * 

* * @author 阿海 * */ public class DateTime { public static final long HOUR_MILLIS = 1000 * 60 * 60; public static final long DAY_MILLIS = HOUR_MILLIS * 24; public static final int EIGHT_HOUR_SECOND = 60 * 60 * 8;// 8小时 public static final int DAY_SECOND = 60 * 60 * 24;// 24小时 public static final long EIGHT_HOUR_MILLI_SECOND = EIGHT_HOUR_SECOND * 1000L; /** * 获取从1970年1月1日经历的天数
* * @return 天数 */ public static int getDayCount() { long daynum = (System.currentTimeMillis() + EIGHT_HOUR_MILLI_SECOND) / DAY_MILLIS; return (int) daynum; } /** * 获取小时数量.
* * @return 小时数 */ public static int getHourCount() { long daynum = System.currentTimeMillis() / HOUR_MILLIS; return (int) daynum; } /** * 获取天数 * * @param date * 日期 * @return 天数 */ public static int getDayCount(final Date date) { return getDayCount(date.getTime()); } /** * 获取天数 * * @param date * 日期 * @return 天数 */ public static int getDayCount(final long time) { long daynum = (time + EIGHT_HOUR_MILLI_SECOND) / DAY_MILLIS; return (int) daynum; } /** * 获取天数 * * @param datetime * 日期 * @return 天数 */ public static int getDayCount(final String datetime) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date; try { date = format.parse(datetime); } catch (ParseException e) { throw new IllegalArgumentException(e.getMessage(), e); } long daynum = (date.getTime() + EIGHT_HOUR_MILLI_SECOND) / DAY_MILLIS; return (int) daynum; } /** * 获取两个日期之间相差的天数 * * @param date1 * 开始日期 * @param date2 * 结束日期 * @return 天数 */ public static int getDayCount(final String date1, String date2) { int dayCount1 = DateTime.getDayCount(date1); int dayCount2 = DateTime.getDayCount(date2); return (dayCount1 - dayCount2); } /** * 获取当天日期,格式为yyyy-MM-dd * * @return 当天日期字符串 */ public static String getDate() { return getDate(System.currentTimeMillis()); } /** * 获取指定天数后的日期,格式为yyyy-MM-dd * * @param daynum * 天数 * @return 日期字符串 */ public static String getDate(final int daynum) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, daynum); return getDate(cal.getTimeInMillis()); } /** * 获取指定天数后的日期,格式为yyyy-MM-dd * * @param daynum * 天数 * @return 日期字符串 */ public static String addDate(final int daynum) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, daynum); return getDate(cal.getTimeInMillis()); } /** * 返回给定日期之后指定天数后的日期,格式为yyyy-MM-dd * * @param date * 日期 * @param daynum * 天数 * @return 日期字符串 */ public static String addDate(final String date, final int daynum) { int[] arr = parseDatetimeToArray(date); int year = arr[0]; int month = arr[1]; int day = arr[2]; Calendar cal = Calendar.getInstance(); cal.set(year, month - 1, day + daynum); return getDate(cal.getTimeInMillis()); } /** * 将时间或者日期转换成int数组 * * @param datetime * 时间 * @return int数组 */ public static int[] parseDatetimeToArray(final String datetime) { int year = Integer.parseInt(datetime.substring(0, 4)); int month = Integer.parseInt(datetime.substring(5, 7)); int day = Integer.parseInt(datetime.substring(8, 10)); return new int[] { year, month, day }; } private static final SimpleDateFormat GET_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); /** * 毫秒数转换成日期,格式为yyyy-MM-dd * * @param millis * 毫秒数 * @return 日期字符串 */ public static synchronized String getDate(final long millis) { Date date = new Date(); if (millis > 0) { date.setTime(millis); } return GET_DATE_FORMAT.format(date); } /** * 获取当前小时 * * @return 小时 */ public static int getHour() { Calendar cld = Calendar.getInstance(); return cld.get(Calendar.HOUR_OF_DAY); } /** * 返回当天为月中的某一天 * * @return 天 */ public static int getDay() { Calendar cld = Calendar.getInstance(); return cld.get(Calendar.DAY_OF_MONTH); } /** * 获取当前月份 * * @return 月份 */ public static int getMonth() { Calendar cld = Calendar.getInstance(); return cld.get(Calendar.MONTH); } /** * 获取当前分钟 * * @return 分钟 */ public static int getMinute() { Calendar cld = Calendar.getInstance(); return cld.get(Calendar.MINUTE); } /** * 获取当前毫秒数,格式为yyyy-MM-dd HH:mm:ss * * @return 毫秒 */ public static String getTime() { return getTime(0); } /** * 获取当前时候后指定分钟数的毫秒数 long millis加上int minute 如int很大会出现被载断情况,得出的结果错误, 现将int转换成long后再进行计算. 如计算一年后的时间24*60*365*60*1000此数已超出int范围,截断后计算出错。 * * @param minute * 指定的分钟数 * @return 毫秒数 */ public static String addTime(final int minute) { long millis = System.currentTimeMillis(); millis = millis + (minute * 60L * 1000L); return getTime(millis); } /** * 获取给定时间后指定分钟数的毫秒数,格式为yyyy-MM-dd HH:mm:ss * * @param time * 给定的时间 * @param minute * 指定的分钟数 * @return 毫秒数 */ public static String addTime(String time, int minute) { long millis = getTimestamp(time); millis = millis + (minute * 60L * 1000L); return getTime(millis); } private static final SimpleDateFormat GET_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** * 根据秒数获取毫秒数,格式为yyyy-MM-dd HH:mm:ss * * @param second * 秒数 * @return 毫秒数 */ public static String getTime(int second) { long millis = second * 1000L; return getTime(millis); } /** * 根据日期返回毫秒数,格式为yyyy-MM-dd HH:mm:ss * * @param date * 日期 * @return 毫秒数 */ public static String getTime(Date date) { long millis = date.getTime(); return getTime(millis); } /** * 根据字符串类型日期返回毫秒数 * * @param time * @return */ public static String getTime(String time) { if (time == null) { return null; } else { return time.substring(0, 19); } } /** * long型毫秒数转成yyyy-MM-dd HH:mm:ss类型的字符串型日期 * * @param millis * 毫秒数 * @return 日期 */ public static synchronized String getTime(final long millis) { Date date = new Date(); if (millis != 0) { date.setTime(millis); } return GET_TIME_FORMAT.format(date); } /** * 根据字符串获取时间戳 * * * @param datetime * 字符串时间 * @return */ public static long getTimestamp(final String datetime) { // 2009-10-10 01:01:01.1 // if (!DateTime.isDateTime(datetime)) { // return 1; // } Calendar cal = Calendar.getInstance(); int year = Integer.parseInt(datetime.substring(0, 4)); int month = Integer.parseInt(datetime.substring(5, 7)); int day = Integer.parseInt(datetime.substring(8, 10)); int hour = Integer.parseInt(datetime.substring(11, 13)); int minute = Integer.parseInt(datetime.substring(14, 16)); int second = Integer.parseInt(datetime.substring(17, 19)); // System.out.println(year + ":" + month + ":" + day); // System.out.println(hour + ":" + minute + ":" + second); cal.set(year, month - 1, day, hour, minute, second); if (datetime.length() > 19) { int mill = Integer.parseInt(datetime.substring(20)); cal.set(Calendar.MILLISECOND, mill); } else { cal.set(Calendar.MILLISECOND, 0); } return cal.getTimeInMillis(); } /** * 获取当前时间戳 * * @return 当前时间,以毫秒为单位 */ public static long getTimestamp() { Calendar cal = Calendar.getInstance(); return cal.getTimeInMillis(); } /** * 获取Unix下的时间戳 * * @return 当前时间,以毫秒为单位 */ public static int getUnixTimestamp() { long timestamp = getTimestamp(); return (int) (timestamp / 1000); } /** * 根据字符串时间获取Unix下的时间戳 * * @param datetime * 字符串日期 * @return 时间值,以毫秒为单位 */ public static int getUnixTimestamp(String datetime) { long timestamp = getTimestamp(datetime); // System.out.println("timestamp:" + timestamp); return (int) (timestamp / 1000); } private static final String IS_DATE_REGEX = "^[0-9]{4}\\-[0-9]{1,2}\\-[0-9]{1,2}$"; /** * 判断字符串是否为正确的日期格式 * * @param str * 字符串日期 * @return 是否合法日期格式 */ public static boolean isDate(final String date) { if (date == null) { return false; } return date.matches(IS_DATE_REGEX); } private static final String IS_TIME_REGEX = "^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$"; /** * 判断字符串是否为正确的时间格式 * * @param time * 格式:10:10:10 * @return 是否合法时间格式 */ public static boolean isTime(final String time) { if (time == null) { return false; } return time.matches(IS_TIME_REGEX); } private static final String IS_DATETIME_REGEX = "^[0-9]{4}\\-[0-9]{1,2}\\-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}(\\.[0-9]{1,3})?$"; /** * 判断字符串是否为正确的日期 + 时间格式 * * @param datetime * 格式:2010-10-10 00:00:00 * @return 是否合法日期 + 时间格式 */ public static boolean isDateTime(final String datetime) { if (datetime == null || datetime.length() == 0) { return false; } return datetime.matches(IS_DATETIME_REGEX); } /** * 根据字符串时间获取秒数 * * @param datetime * 字符串时间 * @return 秒数 */ public static int getSecond(final String datetime) { long time = getTimestamp(datetime); return (int) (time / 1000); } /** * 根据字符串时间获取GMT时间 * * @param time * @return */ @SuppressWarnings("deprecation") public static String getGMT(final String time) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(getTimestamp(time)); Date date = cal.getTime(); return date.toGMTString(); } private static final String[] CN_WEEK_NAMES = { "天", "一", "二", "三", "四", "五", "六" }; /** * 返回当前日期是星期几,中文版 * * @return 星期几 */ public static String getWeekName() { java.util.Calendar cal = java.util.Calendar.getInstance(); int day = cal.get(Calendar.DAY_OF_WEEK) - 1; return CN_WEEK_NAMES[day]; } private static final String[] EN_WEEK_NAMES = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; /** * 根据字符串时间返回星期几 * * @param datetime * 字符串时间 * @return 星期几 */ public static String getWeekName(final String datetime) { Calendar cld = Calendar.getInstance(); cld.setTimeInMillis(getTimestamp(datetime)); int num = cld.get(Calendar.DAY_OF_WEEK) - 1; return EN_WEEK_NAMES[num]; } /** * 获取月份的天数 * * @param monthNum * 0:表示当前月份 负数:表示前n个月份 整数:表示后n个月份 * @return 天数 */ public static int getDayCountOfMonth(final int monthNum) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, monthNum); cal.set(Calendar.DATE, 1); int daynum = cal.getActualMaximum(Calendar.DAY_OF_MONTH); return daynum; } /** * 获取月份的第一天,格式为yyyy-MM-dd * * @param monthNum * 0:表示当前月份 负数:表示前n个月份 整数:表示后n个月份 * @return 指定月份第一天的日期字符串 */ public static String getFirstDayOfMonth(final int monthNum) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, monthNum); cal.set(Calendar.DATE, 1); return getDate(cal.getTimeInMillis()); } /** * 根据给定的日期,返回指定monthNum个月后的月份的第一天,格式为yyyy-MM-dd * * @param date * 日期 * @param monthNum * 月数 * @return date指定monthNum个月后的月份第一天的日期字符串 */ public static String getFirstDayOfMonth(final String date, final int monthNum) { int[] arr = parseDatetimeToArray(date); int year = arr[0]; int month = arr[1]; int day = arr[2]; Calendar cal = Calendar.getInstance(); cal.set(year, month - 1, day); cal.add(Calendar.MONTH, monthNum); cal.set(Calendar.DATE, 1); return getDate(cal.getTimeInMillis()); } /** * 根据给定的日期,返回指定monthNum个月后的月份的最后一天,格式为yyyy-MM-dd * * @param date * 日期 * @param monthNum * 月数 * @return date指定monthNum个月后的月份第一天的日期字符串 */ public static String getLastDayOfMonth(final String date, final int monthNum) { int[] arr = parseDatetimeToArray(date); int year = arr[0]; int month = arr[1]; int day = arr[2]; Calendar cal = Calendar.getInstance(); cal.set(year, month, day); cal.add(Calendar.MONTH, monthNum); cal.set(Calendar.DATE, 1); cal.add(Calendar.DATE, -1); return getDate(cal.getTimeInMillis()); } /** * 获取星期一,格式为yyyy-MM-dd * * @param date * @return 星期一的字符串日期 */ public static String getMonday(final String date) { int[] arr = parseDatetimeToArray(date); int year = arr[0]; int month = arr[1]; int day = arr[2]; Calendar cal = Calendar.getInstance(); cal.set(year, month - 1, day); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.set(Calendar.DAY_OF_WEEK, 2); return getDate(cal.getTimeInMillis()); } /** * 判断传入的日期是否为今天 * * @param time * 字符串日期 * @return boolean 若为今天则返回true */ public static boolean isToday(String time) { if (time == null || time.length() < 10) { return false; } time = time.substring(0, 10); if (DateTime.getDate().equals(time)) { return true; } return false; } private static final SimpleDateFormat GET_INT_TIME_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss"); /** * 获取当前时间,格式为yyyyMMddHHmmss * * @return 当前时间 */ public static synchronized String getIntTime() { Date date = new Date(); return GET_INT_TIME_FORMAT.format(date); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy