java %06d_Java日期处理工具类

该工具类包含了如下功能:

日期格式化yyyy-MM-dd

日期格式化yyyy-MM-dd HH:mm:ss

获取当前日期(yyyy-MM-dd)

日期时间毫秒级格式化

获取日期星期一日期

获取日期星期日日期

获取月的第一天

获取月的最后一天

获取当前年

获取当前月份

获取当月天数

现在是本周中第几天

现在是本月中第几天

现在是一年中第几天

现在是一天中第几小时

现在是一年中第几小时

一年中第几秒

比较日期大小

Java将Unix时间戳转换成指定格式日期字符串

import java.io.Serializable;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import java.util.HashMap;

import java.util.List;

import java.util.Locale;

import java.util.Map;

import java.util.regex.Pattern;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 日期工具类

* @author MrXiao

* @version 1.0.0

*/

public class DateUtil implements Serializable {

private static Logger logger = LoggerFactory.getLogger(DateUtil.class);

/***/

private static final long serialVersionUID = 1L;

/**

* 默认短日期格式

* yyyy-MM-dd

*/

public static final String DATE_DEFAULT_FORMAT = "yyyy-MM-dd";

/**

* 订单号前缀 yyyyMMddHHmmss

*/

public static final String DATETIME_ORDER_FORMAT = "yyyyMMddHHmmss";

/**

* 默认日期时间格式

* yyyy-MM-dd HH:mm:ss

*/

public static final String DATETIME_DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";

/**

* 默认时间格式

* HH:mm:ss

*/

public static final String TIME_DEFAULT_FORMAT = "HH:mm:ss";

/**

* 默认日期短格式

* yyyyMMdd

*/

public static final String DATE_DEFAULT_SHORT_FORMAT = "yyyyMMdd";

/**

* 默认短日期格格式化

*/

private static DateFormat dateFormat = new SimpleDateFormat(DATE_DEFAULT_FORMAT);

/**

* 默认日期时间格式化

*/

private static DateFormat dateTimeFormat = new SimpleDateFormat(DATETIME_DEFAULT_FORMAT);

/**

* 默认时间格式化

*/

private static DateFormat timeFormat = new SimpleDateFormat(TIME_DEFAULT_FORMAT);

/**

* 日历

*/

private static Calendar gregorianCalendar = new GregorianCalendar();

/**

* 日期正则格式

*/

private static Map dateRegFormat = new HashMap();

/** 锁对象 */

private static final Object lockObj = new Object();

/** 存放不同的日期模板格式的sdf的Map */

private static Map> sdfMap = new HashMap>();

static {

dateRegFormat.put(

"^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$",

"yyyy-MM-dd-HH-mm-ss");

dateRegFormat.put(

"^\\d{4}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D+\\d{1,2}\\D*$",

"yyyy-MM-dd-HH-mm-ss");//2017年3月12日 12时05分34秒,2017-03-12 12:05:34,2017/3/12 12:5:34

dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}$",

"yyyy-MM-dd-HH-mm");//2017-03-12 12:05

dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}\\D+\\d{2}$",

"yyyy-MM-dd-HH");//2017-03-12 12

dateRegFormat.put("^\\d{4}\\D+\\d{2}\\D+\\d{2}$", "yyyy-MM-dd");//2017-03-12

dateRegFormat.put("^\\d{4}\\D+\\d{2}$", "yyyy-MM");//2017-03

dateRegFormat.put("^\\d{4}$", "yyyy");//2017

dateRegFormat.put("^\\d{14}$", "yyyyMMddHHmmss");//20170312120534

dateRegFormat.put("^\\d{12}$", "yyyyMMddHHmm");//201703121205

dateRegFormat.put("^\\d{10}$", "yyyyMMddHH");//2017031212

dateRegFormat.put("^\\d{8}$", "yyyyMMdd");//20170312

dateRegFormat.put("^\\d{6}$", "yyyyMM");//201703

dateRegFormat.put("^\\d{2}\\s*:\\s*\\d{2}\\s*:\\s*\\d{2}$",

"yyyy-MM-dd-HH-mm-ss");//13:05:34 拼接当前日期

dateRegFormat.put("^\\d{2}\\s*:\\s*\\d{2}$", "yyyy-MM-dd-HH-mm");//13:05 拼接当前日期

dateRegFormat.put("^\\d{2}\\D+\\d{1,2}\\D+\\d{1,2}$", "yy-MM-dd");//16.10.18(年.月.日)

dateRegFormat.put("^\\d{1,2}\\D+\\d{1,2}$", "yyyy-dd-MM");//30.12(日.月) 拼接当前年份

dateRegFormat.put("^\\d{1,2}\\D+\\d{1,2}\\D+\\d{4}$", "dd-MM-yyyy");//12.21.2016(日.月.年)

}

/**

* ron

* 解决SimpleDateFormat静态化的坑

* 返回一个ThreadLocal的sdf,每个线程只会new一次sdf

* @param pattern

* @return

*/

private static SimpleDateFormat getSimpleDateFormat(final String pattern) {

ThreadLocal tl = sdfMap.get(pattern);

// 双检锁是防止sdfMap这个单例被多次put重复的sdf

if (tl == null) {

synchronized (lockObj) {

tl = sdfMap.get(pattern);

if (tl == null) {

// 使用ThreadLocal替代原来直接new SimpleDateFormat

tl = new ThreadLocal() {

@Override

protected SimpleDateFormat initialValue() {

System.out.println("thread: " + Thread.currentThread() + " init pattern: " + pattern);

return new SimpleDateFormat(pattern);

}

};

// 只有Map中还没有这个pattern的sdf才会生成新的sdf并放入map

sdfMap.put(pattern, tl);

}

}

}

return tl.get();

}

/**

* TODO 将各种日期格式转为 yyyy-MM-dd HH:mm:ss

*

* @param dateStr

* @return

* @author MrXiao

* @date 2017年3月13日 下午6:13:45

*/

public static String formatDate(String dateStr) {

String curDate = new SimpleDateFormat(DATE_DEFAULT_FORMAT).format(new Date());

DateFormat formatter1 = new SimpleDateFormat(DATETIME_DEFAULT_FORMAT);

DateFormat formatter2;

String result = "";

try {

for (String key : dateRegFormat.keySet()) {

if (Pattern.compile(key).matcher(dateStr).matches()) {

formatter2 = new SimpleDateFormat(dateRegFormat.get(key));

if (key.equals("^\\d{2}\\s*:\\s*\\d{2}\\s*:\\s*\\d{2}$")

|| key.equals("^\\d{2}\\s*:\\s*\\d{2}$")) {//13:05:34 或 13:05 拼接当前日期

dateStr = curDate + "-" + dateStr;

} else if (key.equals("^\\d{1,2}\\D+\\d{1,2}$")) {//21.1 (日.月) 拼接当前年份

dateStr = curDate.substring(0, 4) + "-" + dateStr;

}

result = formatter1.format(formatter2.parse(dateStr.replaceAll("\\D+", "-")));

break;

}

}

} catch (Exception e) {

System.err.println("-----------------日期格式无效:" + dateStr);

}

return result;

}

/**

* 日期格式化

* @param date 日期格式字符串

* @param format 日期格式

* @return

*/

public static Date formatDate(String date, String format) {

try {

return new SimpleDateFormat(format).parse(date);

} catch (ParseException e) {

e.printStackTrace();

}

return null;

}

/**

* 日期格式化

* @date 2017年5月10日 下午2:46:44

* @param date 日期

* @param format 日期格式

* @return

*/

public static Date formatDate(Date date, String format) {

String sdate = getDateFormat(date, format);

return formatDate(sdate, format);

}

/**

* 日期格式化yyyy-MM-dd

*

* @param date

* @return

*/

public static String getDateFormat(Date date) {

if(date == null) {

return null;

}

return dateFormat.format(date);

}

/**

* 日期格式化yyyy-MM-dd HH:mm:ss

*

* @param date

* @return

*/

public static String getDateTimeFormat(Date date) {

if(date == null) {

return null;

}

return dateTimeFormat.format(date);

}

/**

* 时间格式化

*

* @param date

* @return HH:mm:ss

*/

public static String getTimeFormat(Date date) {

if(date == null) {

return null;

}

return timeFormat.format(date);

}

/**

* 日期格式化

*

* @param date

* @param 格式类型

* @return

*/

public static String getDateFormat(Date date, String format) {

if (StringUtil.isNotEmpty(format)) {

return new SimpleDateFormat(format).format(date);

}

return null;

}

/**

* 日期格式化 yyyy-MM-dd

*

* @param date

* @return

*/

public static Date getDateFormat(String date) {

try {

return dateFormat.parse(date);

} catch (ParseException e) {

e.printStackTrace();

}

return null;

}

/**

* 时间格式化 yyyy-MM-dd HH:mm:ss

*

* @param date

* @return

*/

public static Date getDateTimeFormat(String date) {

try {

return dateTimeFormat.parse(date);

} catch (ParseException e) {

e.printStackTrace();

}

return null;

}

/**

* 获取当前日期(yyyy-MM-dd)

*

* @param date

* @return

*/

public static Date getNowDate() {

return DateUtil.getDateFormat(dateFormat.format(new Date()));

}

/**

* 日期时间毫秒级格式化

*

* @param time 日期

* @param 格式类型 yyyy-MM-dd HH:mm:ss.SSS

* @return

*/

public static String getDateTimeMillisFormat(long time) {

return getDateTimeMillisFormat(new Date(time)) ;

}

/**

* 日期时间毫秒级格式化

*

* @param date 日期

* @param 格式类型 yyyy-MM-dd HH:mm:ss.SSS

* @return

*/

public static String getDateTimeMillisFormat(Date date) {

return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date);

}

/**

* 获取当前日期星期一日期

*

* @return date

*/

public static Date getFirstDayOfWeek() {

gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);

gregorianCalendar.setTime(new Date());

gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek()); // Monday

return gregorianCalendar.getTime();

}

/**

* 获取当前日期星期日日期

*

* @return date

*/

public static Date getLastDayOfWeek() {

gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);

gregorianCalendar.setTime(new Date());

gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek() + 6); // Monday

return gregorianCalendar.getTime();

}

/**

* 获取日期星期一日期

*

* @param 指定日期

* @return date

*/

public static Date getFirstDayOfWeek(Date date) {

if (date == null) {

return null;

}

gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);

gregorianCalendar.setTime(date);

gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek()); // Monday

return gregorianCalendar.getTime();

}

/**

* 获取日期星期一日期

*

* @param 指定日期

* @return date

*/

public static Date getLastDayOfWeek(Date date) {

if (date == null) {

return null;

}

gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);

gregorianCalendar.setTime(date);

gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek() + 6); // Monday

return gregorianCalendar.getTime();

}

/**

* 获取当前月的第一天

*

* @return date

*/

public static Date getFirstDayOfMonth() {

gregorianCalendar.setTime(new Date());

gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);

return gregorianCalendar.getTime();

}

/**

* 获取当前月的最后一天

*

* @return

*/

public static Date getLastDayOfMonth() {

gregorianCalendar.setTime(new Date());

gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);

gregorianCalendar.add(Calendar.MONTH, 1);

gregorianCalendar.add(Calendar.DAY_OF_MONTH, -1);

return gregorianCalendar.getTime();

}

/**

* 获取指定月的第一天

*

* @param date

* @return

*/

public static Date getFirstDayOfMonth(Date date) {

gregorianCalendar.setTime(date);

gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);

return gregorianCalendar.getTime();

}

/**

* Java将Unix时间戳转换成指定格式日期字符串

* @param timestampString 时间戳 如:"1473048265";

* @param formats 要格式化的格式 默认:"yyyy-MM-dd HH:mm:ss";

*

* @return 返回结果 如:"2016-09-05 16:06:42";

*/

public static String timeStamp2Date(String timestampStr, String formats) {

if (StringUtil.isEmpty(formats))

formats = "yyyy-MM-dd HH:mm:ss";

Long timestamp = Long.parseLong(timestampStr) * 1000;

String date = new SimpleDateFormat(formats, Locale.CHINA).format(new Date(timestamp));

return date;

}

/**

* 获取指定月的最后一天

*

* @param date

* @return

*/

public static Date getLastDayOfMonth(Date date) {

gregorianCalendar.setTime(date);

gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);

gregorianCalendar.add(Calendar.MONTH, 1);

gregorianCalendar.add(Calendar.DAY_OF_MONTH, -1);

return gregorianCalendar.getTime();

}

/**

* 获取日期前一天

*

* @param date

* @return

*/

public static Date getDayBefore(Date date) {

gregorianCalendar.setTime(date);

int day = gregorianCalendar.get(Calendar.DATE);

gregorianCalendar.set(Calendar.DATE, day - 1);

return gregorianCalendar.getTime();

}

/**

* 获取日期后一天

*

* @param date

* @return

*/

public static Date getDayAfter(Date date) {

gregorianCalendar.setTime(date);

int day = gregorianCalendar.get(Calendar.DATE);

gregorianCalendar.set(Calendar.DATE, day + 1);

return gregorianCalendar.getTime();

}

/**

* 获取当前年

*

* @return

*/

public static int getNowYear() {

Calendar d = Calendar.getInstance();

return d.get(Calendar.YEAR);

}

/**

* 获取当前月份

*

* @return

*/

public static int getNowMonth() {

Calendar d = Calendar.getInstance();

return d.get(Calendar.MONTH) + 1;

}

/**

* 获取当月天数

*

* @return

*/

public static int getNowMonthDays() {

Calendar d = Calendar.getInstance();

return d.getActualMaximum(Calendar.DATE);

}

/**

* 现在是本周中第几天

* @return

*/

public static int getNowDayOfWeek() {

Calendar d = Calendar.getInstance();

return d.get(Calendar.DAY_OF_WEEK);

}

/**

* 现在是本月中第几天

* @return

*/

public static int getNowDayOfMonth() {

Calendar d = Calendar.getInstance();

return d.get(Calendar.DAY_OF_MONTH);

}

/**

* 现在是一年中第几天

* @return

*/

public static int getNowDayOfYear() {

Calendar d = Calendar.getInstance();

return d.get(Calendar.DAY_OF_YEAR);

}

/**

* 现在是一天中第几小时

* @return

*/

public static int getNowHourOfDay() {

Calendar d = Calendar.getInstance();

return d.get(Calendar.HOUR_OF_DAY);

}

/**

* 现在是一年中第几小时

* @return

*/

public static int getNowHourOfYear() {

int days = getNowDayOfYear();

int hours = getNowHourOfDay();

return 24 * days + hours;

}

/**

* 一年中第几小时

*

* @return

*/

public static String formatHourOfYear() {

Calendar d = Calendar.getInstance();

int day = d.get(Calendar.DAY_OF_YEAR);

int hour = d.get(Calendar.HOUR_OF_DAY);

hour = 24 * day + hour;

return String.format("%04d", hour);

}

/**

* 一年中的第几分钟

*

* @return

*/

public static String formatMinuteOfYear() {

Calendar d = Calendar.getInstance();

int day = d.get(Calendar.DAY_OF_YEAR);

int hour = d.get(Calendar.HOUR_OF_DAY);

int minute = d.get(Calendar.MINUTE);

minute = 60 * 24 * day + 60 * (hour - 1) + minute;

return String.format("%06d", minute);

}

/**

* 一年中第几秒

*

* @return

*/

public static String formatSecondOfYear() {

Calendar d = Calendar.getInstance();

int day = d.get(Calendar.DAY_OF_YEAR);

int hour = d.get(Calendar.HOUR_OF_DAY);

int minute = d.get(Calendar.MINUTE);

int second = d.get(Calendar.SECOND);

second = 60 * (60 * 24 * day + 60 * (hour - 1) + 60 * (minute - 1)) + second;

return String.format("%08d", second);

}

/**

* 获取时间段的每一天

*

* @param 开始日期

* @param 结算日期

* @return 日期列表

*/

public static List getEveryDay(Date startDate, Date endDate) {

if (startDate == null || endDate == null) {

return null;

}

// 格式化日期(yy-MM-dd)

startDate = DateUtil.getDateFormat(DateUtil.getDateFormat(startDate));

endDate = DateUtil.getDateFormat(DateUtil.getDateFormat(endDate));

List dates = new ArrayList();

gregorianCalendar.setTime(startDate);

dates.add(gregorianCalendar.getTime());

while (gregorianCalendar.getTime().compareTo(endDate) < 0) {

// 加1天

gregorianCalendar.add(Calendar.DAY_OF_MONTH, 1);

dates.add(gregorianCalendar.getTime());

}

return dates;

}

/**

* 获取提前多少个月

*

* @param monty

* @return

*/

public static Date getFirstMonth(int monty) {

Calendar c = Calendar.getInstance();

c.add(Calendar.MONTH, -monty);

return c.getTime();

}

/**

*

* TODO 比较日期大小

* @author MrXiao

* @date 2017年3月17日 下午5:19:02

* @param sdate1

* @param sdate2

* @return sdate1大于sdate2, 返回 1;

* sdate1等于sdate2, 返回 0;

* sdate1小于sdate2, 返回 -1;

*/

public static int compareDate(String sdate1, String sdate2) {

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

Date date1 = df.parse(sdate1);

Date date2 = df.parse(sdate2);

if (date1.getTime() > date2.getTime()) {

return 1;

} else if (date1.getTime() < date2.getTime()) {

return -1;

} else {

return 0;

}

} catch (Exception exception) {

exception.printStackTrace();

}

return 0;

}

/**

*

* TODO 比较日期大小

* @author MrXiao

* @date 2017年3月17日 下午5:25:30

* @param date1

* @param sdate

* @return date1大于sdate, 返回 1;

* date1等于sdate, 返回 0;

* date1小于sdate, 返回 -1;

*/

public static int compareDate(Date date1, String sdate) {

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

Date date2 = df.parse(sdate);

if (date1.getTime() > date2.getTime()) {

return 1;

} else if (date1.getTime() < date2.getTime()) {

return -1;

} else {

return 0;

}

} catch (Exception exception) {

exception.printStackTrace();

}

return 0;

}

/**

*

* TODO 比较日期大小

* @author MrXiao

* @date 2017年3月17日 下午5:27:17

* @param date1

* @param date2

* @return date1大于date2, 返回 1;

* date1等于date2, 返回 0;

* date1小于date2, 返回 -1;

*/

public static int compareDate(Date date1, Date date2) {

try {

if (date1.getTime() > date2.getTime()) {

return 1;

} else if (date1.getTime() < date2.getTime()) {

return -1;

} else {

return 0;

}

} catch (Exception exception) {

exception.printStackTrace();

}

return 0;

}

/**

*

* TODO 返回日期之间相差的天数

* @author MrXiao

* @date 2017年3月17日 下午5:29:49

* @param smdate

* @param bdate

* @return

*/

public static int daysBetween(String smdate, String bdate) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calendar cal = Calendar.getInstance();

long time1 = 0;

long time2 = 0;

try {

cal.setTime(sdf.parse(smdate));

time1 = cal.getTimeInMillis();

cal.setTime(sdf.parse(bdate));

time2 = cal.getTimeInMillis();

} catch (Exception e) {

e.printStackTrace();

}

long between_days = (time2 - time1) / (1000 * 3600 * 24);

return Integer.parseInt(String.valueOf(between_days));

}

public static int daysBetween(Date dt1, Date dt2) {

Calendar cal = Calendar.getInstance();

long time1 = 0;

long time2 = 0;

try {

cal.setTime(dt1);

time1 = cal.getTimeInMillis();

cal.setTime(dt2);

time2 = cal.getTimeInMillis();

} catch (Exception e) {

e.printStackTrace();

}

long between_days = (time2 - time1) / (1000 * 3600 * 24);

return Integer.parseInt(String.valueOf(between_days));

}

// String日期转Date

public static Date convertString2Date(String strDate) {

try {

return dateTimeFormat.parse(strDate);

} catch (Exception e) {

e.printStackTrace();

}

return new Date();

}

/**

* @param aDate

* @param pattern: Date format pattern

* @return

*/

public static final String format(T date, String pattern) {

if(date==null) return null;

try{

SimpleDateFormat df = new SimpleDateFormat(pattern,java.util.Locale.CHINA);

String result = df.format(date);

return result;

}catch(Exception e){

return null;

}

}

/**

* 获取当前日期

*

* @param patten 日期格式,如:yyyy-MM-dd HH:mm:ss

* @return

*/

public static String getDateStr(String pattern) {

String date = getSimpleDateFormat(pattern).format(new Date(System.currentTimeMillis()));

return date;

}

public static Calendar getTime() {

Calendar time=Calendar.getInstance();

return time;

}

public static Calendar getTime(long timeMillis) {

Calendar time=getTime();

time.setTimeInMillis(timeMillis);

return time;

}

public static Date getDate() {

return getTime().getTime();

}

public static Date getDate(long timeMillis) {

return getTime(timeMillis).getTime();

}

public static String getYYYYMMDD() {

return getSimpleDateFormat("yyyyMMdd").format(getDate());

}

public static String getYYYYMMDD(long time) {

return getSimpleDateFormat("yyyyMMdd").format(getDate(time));

}

public static String getHHmmss() {

return getSimpleDateFormat("HHmmss").format(getDate());

}

public static String getYYYYMM() {

return getSimpleDateFormat("yyyyMM").format(getDate());

}

public static String getYYYYMM(long timeMillis) {

return getSimpleDateFormat("yyyyMM").format(getDate(timeMillis));

}

public static String getMMDD() {

return getSimpleDateFormat("MMdd").format(getTime());

}

public static String getMMDD(long timeMillis) {

return getSimpleDateFormat("MMdd").format(getDate(timeMillis));

}

public static String getDD(long timeMillis) {

return getSimpleDateFormat("dd").format(getDate(timeMillis));

}

/**

* 日期格式化(String转换为Date)

*

* @param dateStr

* 日期字符串

* @param patten

* 处理结果日期的显示格式,如:"YYYY-MM-DD"

* @return

*/

public static Date getDateToString(String dateStr, String patten) {

if(StringUtil.isBlank(dateStr)){

return null;

}

try {

return getSimpleDateFormat(patten).parse(dateStr);

} catch (ParseException e) {

e.printStackTrace();

}

return null;

}

/**

* 转换日期

* @param date

* @return

*/

public static Calendar getCalendar(Date date) {

if (date == null) {

return null;

}

Calendar calendar = GregorianCalendar.getInstance();

calendar.setTime(date);

return calendar;

}

/**

*

* TODO 计算昨天或上周五15点

* @author xiezb

* @date 2016年9月22日 上午10:04:48

* @param date

* @return 计算昨天或上周五15点

*/

public static Date calcYesterdayOrLastFriday15OClock(Date date) {

//某一天

Date oneDate = date;

//今天周几

int weekDay = getWeek(date);

//date是周一

if(weekDay == 1){

//某一天

oneDate = addDays(oneDate, -3);

} else {

//某一天

oneDate = addDays(date, -1);

}

//某一天

String sOneDay = getDateFormat(oneDate, DATE_DEFAULT_FORMAT);

//某一天15点

String sOneDay15 = sOneDay+" 15:00:00";

return formatDate(sOneDay15, DATETIME_DEFAULT_FORMAT);

}

/**

*

* TODO 计算某一天15点

* @author xiezb

* @date 2016年9月22日 上午11:58:37

* @param date 日期

* @param days 天数

* @return

*/

public static Date calcOneDay15OClock(Date date, int days) {

//某一天

Date oneDate = addDays(date, days);

//某一天

String sOneDay = getDateFormat(oneDate, DATE_DEFAULT_FORMAT);

//某一天15点

String sOneDay15 = sOneDay+" 15:00:00";

return formatDate(sOneDay15, DATETIME_DEFAULT_FORMAT);

}

/**

* 年份

*

* @param date

* @return

*/

public static int getYear(Date date) {

if (date == null) {

return -1;

}

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.YEAR);

}

/**

* 月份

*

* @param date

* @return

*/

public static int getMonth(Date date) {

if (date == null) {

return -1;

}

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.MONTH) + 1;

}

/**

* 本年的第几天

*

* @param date

* @return

*/

public static int getDayOfYear(Date date) {

if (date == null) {

return -1;

}

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.DAY_OF_YEAR);

}

/**

* 本月的第几天

*

* @param date

* @return

*/

public static int getDayOfMonth(Date date) {

if (date == null) {

return -1;

}

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.DAY_OF_MONTH);

}

/**

* 本周第几天(周几)

*

* @param date

* @return

*/

public static int getWeek(Date date) {

if (date == null) {

return -1;

}

Locale.setDefault(Locale.CHINA);

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.DAY_OF_WEEK) - 1;

}

/**

* 返回小时

*

* @param date

* @return

*/

public static int getHour(Date date) {

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.HOUR_OF_DAY);

}

/**

* 返回分钟

*

* @param date

* @return

*/

public static int getMinute(Date date) {

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.MINUTE);

}

/**

* 返回秒钟

*

* @param date

* @return

*/

public static int getSecond(Date date) {

Calendar calendar = getCalendar(date);

return calendar.get(Calendar.SECOND);

}

/**

* 返回毫秒

*

* @param date

* @return

*/

public static long getMillis(Date date) {

Calendar calendar = getCalendar(date);

return calendar.getTimeInMillis();

}

/**

* 返回两个日期之间的相隔毫秒数

*

* @param d1

* @param d2

* @return

*/

public static long getMillisBetween(Date d1, Date d2) {

long s = getCalendar(d1).getTimeInMillis();

long e = getCalendar(d2).getTimeInMillis();

return Math.abs(e - s);

}

/**

* 返回两个日期之间的相隔分钟

*

* @param d1

* @param d2

* @return

*/

public static long getMiniteBetween(Date d1, Date d2) {

long s = getCalendar(d1).getTimeInMillis();

long e = getCalendar(d2).getTimeInMillis();

return Math.abs(e - s) / (1000 * 60);

}

/**

* 获取两个日期之间的天数:cal2 - cal1

*

* @param cal1

* @param cal2

* @return

*/

public static int getDaysBetween(Calendar cal1, Calendar cal2) {

boolean flag = true;

int days = cal2.get(Calendar.DAY_OF_YEAR) - cal1.get(Calendar.DAY_OF_YEAR);

int year2 = cal2.get(Calendar.YEAR);

int year1 = cal1.get(Calendar.YEAR);

if (year2 < year1) {

flag = false;

}

if (year1 != year2) {

do {

days += cal1.getActualMaximum(Calendar.DAY_OF_YEAR);

if (flag) {

cal1.add(Calendar.YEAR, 1);

} else {

cal1.add(Calendar.YEAR, -1);

}

} while (cal1.get(Calendar.YEAR) != year2);

}

if (flag) {

return days;

}

return -days;

}

public static int getDaysAbsBetween(Date date1, Date date2) {

return Math.abs(getDaysBetween(getCalendar(date1), getCalendar(date2)));

}

/**

* 获取两个日期之间的天数:date2 - date1

*

* @param date1

* @param date2

* @return

*/

public static int getDaysBetween(Date date1, Date date2) {

return getDaysBetween(getCalendar(date1), getCalendar(date2));

}

/**

* 获取两个日期之间相隔月份 cal2 - cal1

*

* @param cal1

* @param cal2

* @return

*/

public static int getMonthsBetween(Calendar cal1, Calendar cal2) {

int months = cal2.get(Calendar.MONTH) - cal1.get(Calendar.MONTH);

boolean flag = true;

int year2 = cal2.get(Calendar.YEAR);

int year1 = cal1.get(Calendar.YEAR);

if (year2 < year1)

flag = false;

if (year1 != year2) {

do {

months += cal1.getActualMaximum(Calendar.MONTH) + 1;

if (flag)

cal1.add(Calendar.YEAR, 1);

else

cal1.add(Calendar.YEAR, -1);

} while (cal1.get(Calendar.YEAR) != year2);

}

if (flag) {

return months;

}

return -months;

}

/**

* 获取两个日期相隔的月份 date2 - date1

*

* @param date1

* @param date2

* @return

*/

public static int getMonthsBetween(Date date1, Date date2) {

return getMonthsBetween(getCalendar(date1), getCalendar(date2));

}

/**

* 获取两个日期相隔年份 cal2 - cal1

*

* @param cal1

* @param cal2

* @return

*/

public static int getYearsBetween(Calendar cal1, Calendar cal2) {

int year2 = cal2.get(1);

int year1 = cal1.get(1);

return year2 - year1;

}

/**

* 获取两个日期相隔年份 date2 - date1

*

* @param date1

* @param date2

* @return

*/

public static int getYearsBetween(Date date1, Date date2) {

return getYearsBetween(getCalendar(date1), getCalendar(date2));

}

/**

* 获取给定日期n天后(前)的日期

*

* @param date

* @param days

* @return

*/

public static Date addDays(Date date, int n) {

if (date == null) {

return null;

}

Calendar calendar = GregorianCalendar.getInstance();

calendar.setTime(date);

calendar.add(Calendar.DAY_OF_MONTH, n);

return calendar.getTime();

}

/**

* 获取给定日期n个月后(前)的日期

*

* @param date

* @param months

* @return

*/

public static Date addMonths(Date date, int n) {

if (date == null) {

return null;

}

Calendar calendar = GregorianCalendar.getInstance();

calendar.setTime(date);

calendar.add(Calendar.MONTH, n);

return calendar.getTime();

}

/**

* 获取给定日期n年后(前)的日期

*

* @param date

* @param years

* @return

*/

public static Date addYears(Date date, int n) {

if (date == null) {

return null;

}

Calendar calendar = GregorianCalendar.getInstance();

calendar.setTime(date);

calendar.add(Calendar.YEAR, n);

return calendar.getTime();

}

/**

* 获取给定日期n小时后(前)的日期

*

* @param date

* @param hours

* @return

*/

public static Date addHours(Date date, int n) {

Calendar calendar = GregorianCalendar.getInstance();

calendar.setTime(date);

calendar.add(Calendar.HOUR_OF_DAY, n);

return calendar.getTime();

}

/**

* 获取给定日期n分钟后(前)的日期

*

* @param date

* @param minutes

* @return

*/

public static Date addMinutes(Date date, int n) {

Calendar calendar = GregorianCalendar.getInstance();

calendar.setTime(date);

calendar.add(Calendar.MINUTE, n);

return calendar.getTime();

}

/**

* 获取给定日期n秒后(前)的日期

*

* @param date

* @param seconds

* @return

*/

public static Date addSeconds(Date date, int n) {

Calendar calendar = GregorianCalendar.getInstance();

calendar.setTime(date);

calendar.add(Calendar.SECOND, n);

return calendar.getTime();

}

/**

* 获取上个月第一天

*

* @return

*/

public static Date getLastMonthFirstDay() {

Calendar calendar = Calendar.getInstance();

calendar.add(Calendar.MONTH, -1);

calendar.set(Calendar.DAY_OF_MONTH, 1);

return calendar.getTime();

}

/**

* 获取上个月最后一天

*

* @return

*/

public static Date getLastMonthLastDay() {

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.DAY_OF_MONTH, 1);

calendar.add(Calendar.DATE, -1);

return calendar.getTime();

}

/**

* 获取当前月第一天

*

* @return

*/

public static Date getCurMonthFirstDay() {

Calendar calendar = Calendar.getInstance();

calendar.add(Calendar.MONTH, 0);

calendar.set(Calendar.DAY_OF_MONTH, 1);

return calendar.getTime();

}

/**

* / 获取前月的最后一天

*

* @return

*/

public static Date getCurMonthLastDay() {

Calendar calendar = Calendar.getInstance();

calendar.add(Calendar.MONTH, 1);

calendar.set(Calendar.DAY_OF_MONTH, 0);

return calendar.getTime();

}

/**

* 获取给定时间所在月份的第一天

* @param date

* @return

*/

public static Date getSpecifyDateMonthFirstDay(Date date){

Calendar calendar = getCalendar(date);

calendar.add(Calendar.MONTH, 0);

calendar.set(Calendar.DAY_OF_MONTH, 1);

return calendar.getTime();

}

public static Date getSpecifyDateMonthLastDay(Date date){

Calendar calendar = getCalendar(date);

calendar.add(Calendar.MONTH, 1);

calendar.set(Calendar.DAY_OF_MONTH, 0);

return calendar.getTime();

}

/**

* 获取当前年份给定月份的天数

*

* @return

*/

public static int dayLenOfMonth(int m) {

if (m == 2) {

int year = getYear(new Date());

if (((year % 100 == 0) && (year % 400 == 0)) || ((year % 100 != 0) && (year % 4 == 0))) {

return 29;

}

return 28;

} else if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {

return 31;

} else {

return 30;

}

}

/**

* 是否使用平今仓

* @param exchangeNo 交易所编码

* @param sysBuyDealTime 系统买入成交时间

* @return

*/

public static boolean isCloseToday(String exchangeNo, Date sysBuyDealTime){

if(!"SHFE".equalsIgnoreCase(exchangeNo)){

return false;

}

if(sysBuyDealTime == null) {

return false;

}

//系统买入时间

long buyTime = sysBuyDealTime.getTime();

//当前时间

Date now = new Date();

//系统平仓时间

long sysSaleTime = now.getTime();

//今天15点

Date thisDate15 = DateUtil.calcOneDay15OClock(now, 0);

//昨天或上周五15点

Date lastDate15 = DateUtil.calcYesterdayOrLastFriday15OClock(now);

//明天15点

Date nextDate15 = DateUtil.calcOneDay15OClock(now, 1);

//上期所闭市时间: [01:00, 02:30, 15:00]

if(sysSaleTime > lastDate15.getTime() && sysSaleTime <= thisDate15.getTime()) {

if(buyTime > lastDate15.getTime() && buyTime < thisDate15.getTime()) {

//平今: 计算系统平仓参数

return true;

} else if(buyTime < lastDate15.getTime()) {

//平仓: 计算系统平仓参数

return false;

}

}

//上期所闭市时间: [23:00]

else if(sysSaleTime > thisDate15.getTime() && sysSaleTime < nextDate15.getTime()) {

//平仓

if(buyTime < thisDate15.getTime()){

//平仓: 计算系统平仓参数

return false;

} else if(buyTime > thisDate15.getTime() && buyTime < nextDate15.getTime()){

//平今: 计算系统平仓参数

return true;

}

}

return false;

}

public static void main(String[] args) {

int day = getNowDayOfYear();

int dhour = getNowHourOfDay();

int yhour = getNowHourOfYear();

int wday = getNowDayOfWeek();

logger.info("day:{}, wday:{}, dhour:{}, yhour:{}", day, wday, dhour, yhour);

Date date = DateUtil.formatDate("20180102 14:25:34", "yyyyMMdd HH:mm:ss");

logger.info("time:{}", date.getTime());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值