各种时间转换和某天的开始结束时间及各类时间管理

获取当天昨天上周当月当年的起始和结束时间 获取当天、昨天、上周、当月、上个月 当年等起始和结束时间 立即下载

package com.xiangming.bm.biz.utils;

import java.text.DecimalFormat;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xiangming.bm.biz.constant.summary.SummaryConstant;
import com.xiangming.commons.core.utils.MathUtils;
import com.xiangming.commons.core.utils.ObjectUtils;
import com.xiangming.commons.core.utils.StringUtils;

/**

  • http://dyccsxg.iteye.com/blog/1908607
  • 时间跳变1582-10-04 的下一天是 1582-10-15

  • Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR,
  • 1582); calendar.set(Calendar.MONTH, 9); calendar.set(Calendar.DAY_OF_MONTH,
  • 4);
  • SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);
  • System.out.println(format.format(calendar.getTime())); // 1582-10-04
  • calendar.add(Calendar.DAY_OF_MONTH, 1); // 增加一天
  • System.out.println(format.format(calendar.getTime())); // 1582-10-15 #
  • 参见:http
  • 😕/dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds
  • /latest/html/zh_CN/api/java/util/GregorianCalendar.html
  • 在JVM启动的时候,加入参数-Duser.timezone=GMT+08
  • GMT, UTC 和 CST 时间的区别
  • GMT 代表格林尼治标准时间;
  • UTC 是比 GMT 更加精确的世界时间标准,在不需要精确到秒的情况下,通常也将GMT和UTC视作等同;
  • CST 可以同时表示中国、美国、澳大利亚、古巴四个国家的标准时间;
  • 参见:
  • http://www.cnblogs.com/sanshi/archive/2009/08/28/1555717.html
  • http://baike.baidu.com/view/42936.htm
  • @author

*/
public class DateUtils {

private static final Logger LOG = LoggerFactory.getLogger(DateUtils.class);
public static final int PRE_DAY_MILLISECOND = 24 * 60 * 60 * 1000;

public static final long TIME_INTERVAL_MILLISECOND = 24L * 60 * 60 * 1000 * 92;

private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone("UTC");
private static final TimeZone BEIJING_TIME_ZONE = TimeZone.getTimeZone("Asia/Shanghai");
private static final int UTC_TIME_ZONE_INT = 307;
private static final int BEIJING_TIME_ZONE_INT = 521;

public static final String TIME_PATTERN_DEFAULT = "yyyyMMddHHmmssSSS";
public static final String TIME_PATTERN_DISPLAY_DEFAULT = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String TIME_PATTERN_DISPLAY = "yyyy-MM-dd HH:mm:ss";
public static final String TIME_PATTERN_DAY = "yyyy-MM-dd";
public static final String TIME_PATTERN_DAY_SLASH = "yyyy/MM/dd";
public static final String TIME_PATTERN_MONTH_DAY = "MM.dd";
public static final String TIME_PATTERN_YEAR_MONTH = "yyyy.MM";

public static final int[] DAY_OF_MONTH_MAX = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

public static final long UTC_DATE_LONG_DEFAULT = 19700101L;
public static final long UTC_DATETIME_LONG_DEFAULT = 19700101000000000L;

public static final long VALID_MILLISECOND_SHORT = 2L * 60 * 1000;// 2分钟的有效期

private DateUtils() {
}

public static TimeZone getTimeZone(Short timeZoneId) {
    return timeZoneId == null ? null : getTimeZone(timeZoneId.intValue());
}

public static TimeZone getTimeZone(int timeZoneIdInt) {
    return TimeZone.getDefault();
}

public static TimeZone getTimeZone(String timeZoneId) {
    return getTimeZone(timeZoneId);
}

public static TimeZone getUtcTimeZone() {
    return UTC_TIME_ZONE;
}

public static TimeZone getBeijinTimeZone() {
    return BEIJING_TIME_ZONE;
}

public static int getUtcTimeZoneInt() {
    return UTC_TIME_ZONE_INT;
}

public static int getBeijinTimeZoneInt() {
    return BEIJING_TIME_ZONE_INT;
}

public static Date toUtcDate(String s, String pattern) {
    return toDate(s, pattern, UTC_TIME_ZONE);
}

public static Date toUtcDate(String s) {
    return toDate(s, TIME_PATTERN_DEFAULT, UTC_TIME_ZONE);
}

/**
 * 
 * @param s
 *            UTC时间,格式:yyyyMMddHHmmssSSS
 * @return
 */
public static Date toUtcDate(long s) {
    return toDate(String.valueOf(s), TIME_PATTERN_DEFAULT, UTC_TIME_ZONE);
}

/**
 * 
 * @param s
 *            日期字符串
 * @param pattern
 *            yyyy-MM-dd<br>
 *            HH:mm:ss<br>
 *            yyyy-MM-dd HH:mm:ss<br>
 *            MM-dd<br>
 *            HH:mm<br>
 *            MM-dd HH:mm:ss<br>
 *            yyyy-MM-dd HH:mm:ss.S<br>
 *            yyyyMMdd<br>
 *            yyyyMMddHHmmssS<br>
 *            yyyyMMddHHmmssSSS<br>
 *            MM-dd HH:mm<br>
 *            yyyy-MM-dd HH:mm:ss <br>
 *            yyyy-MM-dd HH:mm:ss.SSS<br>
 * @param timeZone
 *            日期字符串对应的时区
 * @return 本地日期对象
 */
public static Date toDate(String s, String pattern, TimeZone timeZone) {
    if (StringUtils.isBlank(pattern)) {
        pattern = "yyyy-MM-dd HH:mm:ss.SSS";
    }
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        dateFormat.setTimeZone(timeZone);
        Date result = dateFormat.parse(s);
        return result;
    } catch (Exception e) {
        LOG.error(e.getMessage(), e);
    }
    return null;
}

public static Date toDate(String s, TimeZone timeZone) {
    return toDate(s, "yyyy-MM-dd HH:mm:ss.SSS", timeZone);
}

public static Date toDate(String s, String pattern) {
    return toDate(s, pattern, TimeZone.getDefault());
}

public static Date toDate(String s) {
    if (StringUtils.isBlank(s))
        return null;
    return toDate(s, "yyyyMMddHHmmssSSS", TimeZone.getDefault());
}

public static Date toDate(long s) {
    if (s == 0)
        return null;
    return toDate(s, "yyyyMMddHHmmssSSS", TimeZone.getDefault());
}

/**
 * 
 * @param s
 *            日期字符串, yyyyMMdd|yyyyMMddHHmmssSSS,具体格式根据pattern来决定
 * @param pattern
 * @param timeZone
 *            日期字符串对应的时区
 * @return
 */
public static Date toDate(long s, String pattern, TimeZone timeZone) {
    return toDate(String.valueOf(s), pattern, timeZone);
}

/**
 * 
 * @param date
 *            本地日期对象
 * @param pattern
 *            yyyy-MM-dd<br>
 *            HH:mm:ss<br>
 *            yyyy-MM-dd HH:mm:ss<br>
 *            MM-dd<br>
 *            HH:mm<br>
 *            MM-dd HH:mm:ss<br>
 *            yyyy-MM-dd HH:mm:ss.S<br>
 *            yyyyMMdd<br>
 *            yyyyMMddHHmmssS<br>
 *            MM-dd HH:mm<br>
 *            yyyy-MM-dd HH:mm:ss.SSS<br>
 *            yyyy-MM-dd HH:mm:ss<br>
 *            yyyy年MM月dd日 HH:mm:ss<br>
 *            yyyy年MM月dd日 HH:mm<br>
 * @param timeZone
 *            格式化后的时间的时区
 * @return
 */
public static String formatDate(Date date, String pattern, TimeZone timeZone) {
    if (StringUtils.isBlank(pattern)) {
        throw new NullPointerException("StringUtil.isBlank(pattern) pattern=" + pattern);
    }
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        if (timeZone != null) {
            dateFormat.setTimeZone(timeZone);
        }
        return dateFormat.format(date);
    } catch (Exception e) {
        LOG.error(e.getMessage(), e);
    }
    return "";
}

public static String formatDate(String dateStr, String dateStrPattern, TimeZone timeZone, String pattern) {
    if (StringUtils.isBlank(pattern)) {
        throw new NullPointerException("StringUtil.isBlank(pattern) pattern=" + pattern);
    }
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat(dateStrPattern);
        if (timeZone != null) {
            dateFormat.setTimeZone(timeZone);
        }
        Date date = dateFormat.parse(dateStr);
        return formatDate(date, pattern, timeZone);
    } catch (Exception e) {
        LOG.error(e.getMessage(), e);
    }
    return "";
}

public static String formatDate(String dateStr, String dateStrPattern, int timeZoneIdInt, String pattern) {
    if (StringUtils.isBlank(pattern)) {
        throw new NullPointerException("StringUtil.isBlank(pattern) pattern=" + pattern);
    }
    try {
        TimeZone timeZone = getTimeZone(timeZoneIdInt);
        return formatDate(dateStr, dateStrPattern, timeZone, pattern);
    } catch (Exception e) {
        LOG.error(e.getMessage(), e);
    }
    return "";
}

/**
 * 
 * @param date
 *            本地日期对象
 * @param timeZone
 *            格式化后的时间的时区
 * @return
 */
public static String formatDate(Date date, TimeZone timeZone) {
    return formatDate(date, "yyyy-MM-dd HH:mm:ss.SSS", timeZone);
}

public static String formatDate(Date date, String pattern) {
    return formatDate(date, pattern, TimeZone.getDefault());
}

public static String formatDate(Date date) {
    return formatDate(date, "yyyy-MM-dd HH:mm:ss.SSS", TimeZone.getDefault());
}

/**
 * 
 * @param date
 *            本地日期对象
 * @param timeZoneIdInt
 *            格式化后的时间的时区
 * @return
 */
public static String formatDate(Date date, int timeZoneIdInt) {
    return formatDate(date, "yyyy-MM-dd HH:mm:ss.SSS", getTimeZone(timeZoneIdInt));
}

/**
 * 
 * @param date
 *            本地日期对象
 * @param timeZone
 *            格式化后的时间的时区
 * @return yyyyMMddHHmmssSSS
 */
public static long getLongDate() {
    return formatDateToLong(new Date());
}

public static long formatDateToLong(Date date) {
    return formatDateToHbaseLong(date, BEIJING_TIME_ZONE);
}

public static long formatDateToHbaseLong(Date date, TimeZone timeZone) {
    String result = formatDate(date, TIME_PATTERN_DEFAULT, timeZone);
    return MathUtils.toLong(result);
}

public static long formatDateToHbaseUtc(Date date) {
    String result = formatDate(date, TIME_PATTERN_DEFAULT, UTC_TIME_ZONE);
    return MathUtils.toLong(result);
}

public static long formatDateForLongUtc(String date, String pattern) {
    return formatDateToHbaseUtc(toDate(date, pattern));
}

public static long formatDateToHbaseUtc() {
    String result = formatDate(new Date(), TIME_PATTERN_DEFAULT, UTC_TIME_ZONE);
    return MathUtils.toLong(result);
}

/**
 * 
 * @param utcLong
 *            utcLong格式yyyyMMddHHmmssSSS
 * @param timeZoneIdInt
 *            格式化后的时间的时区
 * @return
 */
public static String formatDateHbaseUtcToDisplay(long utcLong, int timeZoneIdInt) {
    return formatDateHbaseUtcToDisplay(utcLong, TIME_PATTERN_DEFAULT, timeZoneIdInt, TIME_PATTERN_DISPLAY_DEFAULT);
}

/**
 * 
 * @param utcLong
 *            utcLong格式yyyyMMddHHmmssSSS
 * @param timeZone
 *            用户设定的时区
 * @return
 */
public static String formatDateHbaseUtcToDisplay(long utcLong, TimeZone timeZone) {
    return formatDateHbaseUtcToDisplay(utcLong, TIME_PATTERN_DEFAULT, timeZone, TIME_PATTERN_DISPLAY_DEFAULT);
}

/**
 * 
 * @param dateLong
 *            utcLong格式yyyyMMddHHmmssSSS
 * @param timeZone
 *            用户设定的时区
 * @return
 */
public static String formatLongToDisplay(long dateLong, TimeZone timeZone, String pattern) {
    return formatDateToDisplay(dateLong, TIME_PATTERN_DEFAULT, timeZone, pattern);
}

/**
 * 根据用户设定的timeZoneIdInt,把utcLong(yyyyMMddHHmmssSSS)转化为显示的时间
 * 
 * @param utcLong
 *            数据库中保存的大部分都是yyyyMMddHHmmssSSS
 * @param patternUtc
 *            utcLong格式yyyyMMddHHmmssSSS
 * @param timeZone
 *            用户设定的时区
 * @param pattern
 *            转化为显示的时间格式
 * @return INIT_UTC_DATETIME_LONG||INIT_UTC_DATE_LONG直接返回""
 */
public static String formatDateHbaseUtcToDisplay(long utcLong, String patternUtc, TimeZone timeZone, String pattern) {
    if (utcLong == UTC_DATETIME_LONG_DEFAULT || utcLong == UTC_DATE_LONG_DEFAULT) {
        return "";
    }
    if (StringUtils.isBlank(patternUtc)) {
        patternUtc = TIME_PATTERN_DEFAULT;
    }

    if (StringUtils.isBlank(pattern)) {
        pattern = TIME_PATTERN_DISPLAY_DEFAULT;
    }

    Date date = toDate(String.valueOf(utcLong), patternUtc, UTC_TIME_ZONE);
    String result = formatDate(date, pattern, timeZone);
    return result;
}

/**
 * 根据用户设定的timeZoneIdInt,把utcLong(yyyyMMddHHmmssSSS)转化为显示的时间
 * 
 * @param dateLong
 *            数据库中保存的大部分都是yyyyMMddHHmmssSSS
 * @param patternUtc
 *            dateLong格式yyyyMMddHHmmssSSS
 * @param timeZone
 *            用户设定的时区
 * @param pattern
 *            转化为显示的时间格式
 * @return INIT_UTC_DATETIME_LONG||INIT_UTC_DATE_LONG直接返回""
 */
public static String formatDateToDisplay(long dateLong, String patternLong, TimeZone timeZone, String pattern) {
    if (dateLong == UTC_DATETIME_LONG_DEFAULT || dateLong == UTC_DATE_LONG_DEFAULT) {
        return "";
    }
    if (StringUtils.isBlank(patternLong)) {
        patternLong = TIME_PATTERN_DEFAULT;
    }

    if (StringUtils.isBlank(pattern)) {
        pattern = TIME_PATTERN_DISPLAY_DEFAULT;
    }

    Date date = toDate(String.valueOf(dateLong), patternLong, BEIJING_TIME_ZONE);
    String result = formatDate(date, pattern, timeZone);
    return result;
}

/**
 * 
 * @param date
 *            北京时间
 * @param pattern
 *            显示模版
 * @return
 */
public static String formatDateToDisplay(Date date, String pattern) {
    if (StringUtils.isBlank(pattern)) {
        pattern = TIME_PATTERN_DISPLAY_DEFAULT;
    }
    String result = formatDate(date, pattern, BEIJING_TIME_ZONE);
    return result;
}

/**
 * 根据用户设定的timeZoneIdInt,把utcLong(yyyyMMddHHmmssSSS)转化为显示的时间
 * 
 * @param utcLong
 *            数据库中保存的大部分都是yyyyMMddHHmmssSSS
 * @param patternUtc
 *            utcLong格式yyyyMMddHHmmssSSS
 * @param timeZoneIdInt
 *            用户设定的时区
 * @param pattern
 *            转化为显示的时间格式
 * @return INIT_UTC_DATETIME_LONG||INIT_UTC_DATE_LONG直接返回""
 */
public static String formatDateHbaseUtcToDisplay(long utcLong, String patternUtc, int timeZoneIdInt, String pattern) {
    return formatDateHbaseUtcToDisplay(utcLong, patternUtc, getTimeZone(timeZoneIdInt), pattern);
}

/**
 * 
 * @param dateStr
 * @param pattern
 * @param sourceTimeZone
 * @return
 */
public static Date toAnotherTimeZone(String dateStr, String pattern, TimeZone sourceTimeZone, TimeZone targetTimeZone) {
    try {
        Date sourceDate = toDate(dateStr, pattern, sourceTimeZone);
        String targetDateStr = formatDate(sourceDate, pattern, targetTimeZone);
        return toDate(targetDateStr, pattern, targetTimeZone);
    } catch (Exception e) {
        LOG.error(e.getMessage(), e);
    }
    return null;
}

public static Date toAnotherTimeZone(Date date, TimeZone sourceTimeZone, TimeZone targetTimeZone) {
    try {
        String sourceDateStr = formatDate(date, TIME_PATTERN_DISPLAY_DEFAULT, sourceTimeZone);
        return toAnotherTimeZone(sourceDateStr, TIME_PATTERN_DISPLAY_DEFAULT, sourceTimeZone, targetTimeZone);
    } catch (Exception e) {
        LOG.error(e.getMessage(), e);
    }
    return null;
}

public static void printTimeZoneAvailableIDs() {
    String[] ids = TimeZone.getAvailableIDs();
    TimeZone timeZone;
    if (LOG.isDebugEnabled()) {
        LOG.debug(TimeZone.getDefault().toString());
    }

    for (int i = 0; i < ids.length; i++) {
        System.out.println("");
        timeZone = TimeZone.getTimeZone(ids[i]);
        if (LOG.isDebugEnabled()) {
            LOG.debug("ids[" + i + "]=" + ids[i] + " timeZone=" + timeZone);
            LOG.debug(timeZone.getDisplayName() + "	" + timeZone.getDisplayName(true, 1, Locale.US));
        }
        if (timeZone.equals(TimeZone.getDefault())) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("printTimeZoneAvailableIDs ****************************i=" + i);
            }
        }
    }
}

public static void printAvailableLocales() {
    Locale[] localeArr = Locale.getAvailableLocales();
    if (LOG.isDebugEnabled()) {
        for (int i = 0; i < localeArr.length; i++) {
            LOG.debug("localeArr[" + i + "].getCountry()=" + localeArr[i].getCountry()
                    + " localeArr[i].getDisplayCountry()=" + localeArr[i].getDisplayCountry() + " localeArr[" + i + "]="
                    + localeArr[i]);
        }
    }
}

public static Date nullToDate(Date date) {
    if (date == null) {
        return new Date();
    }
    return date;
}

/**
 * @param date
 * @param amount
 * @param type
 *            Calendar.YEAR=1 Calendar.MONTH=2 Calendar.DATE=5 <br>
 *            Calendar.HOUR=10 Calendar.MINUTE=12 Calendar.SECOND=13
 *            Calendar.MILLISECOND=14
 * @return
 */
public static Date toAnotherDate(Date date, long amount, int unit) {
    if (date == null) {
        throw new NullPointerException("date == null");
    }
    if (unit == 14) {
        return new Date(date.getTime() + amount);
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(unit, (int) amount);
    return calendar.getTime();
}

public static Date toAnotherDate(long amount, int unit) {
    return toAnotherDate(new Date(), amount, unit);
}

/**
 * 
 * @param dateAnother
 * @param birthDate
 * @return
 */
public static int getAge(Date dateAnother, Date birthDate) {
    if (dateAnother == null) {
        dateAnother = new Date();
    }
    if (birthDate == null) {
        birthDate = new Date();
    }
    return getYear(dateAnother) - getYear(birthDate);
}

/**
 * 
 * @param date
 * @return
 */
public static int getYear(Date date) {
    if (date == null) {
        date = new Date();
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    return calendar.get(1);
}

/**
 * 
 * @param strDate
 * @param type
 * @return
 */

public static int getWeek(Date date) {
    if (date == null) {
        date = new Date();
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    return calendar.get(3);
}

public static int getWeek() {
    return getWeek(null);
}

public static int getYearWeek(Date date) {
    if (date == null) {
        date = new Date();
    }
    int yearInt = getYear(date);
    int weekInt = getWeek(date);
    return yearInt * 100 + weekInt;
}

public static int getYearWeek() {
    return getYearWeek(null);
}

/**
 * 返回给定月份的最大日期
 * 
 * @param year
 *            year >0
 * @param month
 *            [0,11]
 * @return
 */
public static int getDayOfMonthMax(int year, int month) {
    if (year < 1) {
        throw new IllegalArgumentException(
                "getDayOfMonthMax(int year, int month) year < 1 year=" + year + " month=" + month);
    }
    if (month < 0 || month > 11) {
        throw new IllegalArgumentException(
                "getDayOfMonthMax(int year, int month) month < 0 || month > 11 year=" + year + " month=" + month);
    }

    if (month != 2) {
        return DAY_OF_MONTH_MAX[month];
    } else {// 四年一闰;百年不闰,四百年再闰。
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {// 闰年
            return 29;
        }
        return 28;
    }
}

/**
 * 
 * @param startTime
 *            UTC时间,格式:yyyyMMddHHmmssSSS
 * @param endTime
 *            UTC时间,格式:yyyyMMddHHmmssSSS
 * @return 缩小后的endTime
 */
public static long shrinkTimeInterval(long startTime, long endTime) {
    return shrinkTimeInterval(startTime, endTime, TIME_INTERVAL_MILLISECOND);
}

/**
 * 自动缩小时间区间
 * 
 * @param startTime
 *            UTC时间,格式:yyyyMMddHHmmssSSS
 * @param endTime
 *            UTC时间,格式:yyyyMMddHHmmssSSS
 * @param timeIntervalMax
 *            允许的最大毫秒数
 * @return 缩小后的endTime
 */
public static long shrinkTimeInterval(long startTime, long endTime, long timeIntervalMax) {
    if (startTime < endTime) {
        Date startTimeDate = toDate(String.valueOf(startTime), TIME_PATTERN_DEFAULT, UTC_TIME_ZONE);
        Date endTimeDate = toDate(String.valueOf(endTime), TIME_PATTERN_DEFAULT, UTC_TIME_ZONE);
        if (endTimeDate.getTime() - startTimeDate.getTime() > timeIntervalMax) {
            startTimeDate.setTime(startTimeDate.getTime() + timeIntervalMax);
            long endTimeShrink = MathUtils.toLong(formatDate(startTimeDate, TIME_PATTERN_DEFAULT, UTC_TIME_ZONE));
            if (LOG.isDebugEnabled()) {
                LOG.debug("timeIntervalMax=" + timeIntervalMax);
                LOG.debug("startTime=" + startTime);
                LOG.debug("endTime=" + endTime);
                LOG.debug("endTimeShrink=" + endTimeShrink);
            }
            endTime = endTimeShrink;
        }
    }
    return endTime;
}

/**
 * 判断有效期<br>
 * expire 期满;文件、协议等(因到期而)失效;断气;逝世
 * 
 * @param timeLongUtc
 *            yyyyMMddHHmmssSSS
 * @param validMillisecond
 *            有效期,单位:毫秒
 * @return true=有效期内 false=失效
 */
public static boolean expiryDateCheck(String timeLongUtc) {
    return expiryDateCheck(timeLongUtc, VALID_MILLISECOND_SHORT);
}

public static boolean expiryDateCheck(String timeLongUtc, long validMillisecond) {
    Date dateUtc = DateUtils.toDate(timeLongUtc, TIME_PATTERN_DEFAULT, getUtcTimeZone());
    Date dateNowLocal = new Date();
    return (dateNowLocal.getTime() - dateUtc.getTime() <= validMillisecond);
}

public static long utcDateAdd(long millisecond) {
    Date date = new Date();
    date.setTime(date.getTime() + millisecond);
    String result = formatDate(date, TIME_PATTERN_DEFAULT, UTC_TIME_ZONE);
    return MathUtils.toLong(result);
}

public static Date currDateAdd(Date currDate, long millisecond) {
    Date newDate = new Date();
    if (currDate == null)
        return null;
    newDate.setTime(currDate.getTime() + millisecond);
    return newDate;
}

/**
 * calculateRemainTime 计算剩余时间: xx天xx小时xx分钟(xx秒钟)
 * 
 * @param expiredDate
 *            失效时间
 * @param showSecond
 *            显示秒钟
 * @return
 * @author jonex 2015年4月16日
 * 
 */
public static String calculateRemainTime(Date expiredDate, boolean showSecond) {
    Calendar expiredCalendar = Calendar.getInstance();
    expiredCalendar.setTime(expiredDate);
    Calendar currentCalendar = Calendar.getInstance();
    currentCalendar.setTime(new Date());
    StringBuffer buffer = new StringBuffer();
    long expiredTime = expiredCalendar.getTimeInMillis();
    long currentTime = currentCalendar.getTimeInMillis();
    long dif = Math.abs(expiredTime - currentTime);
    int days = new Long(dif / (1000 * 60 * 60 * 24)).intValue();
    if (days != 0) {
        buffer.append(days).append("天");
    }
    int hours = new Long((dif % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)).intValue();
    if (hours != 0) {
        buffer.append(hours).append("小时");
    }
    int minutes = new Long(((dif % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) / (1000 * 60)).intValue();
    if (hours != 0) {
        buffer.append(minutes).append("分钟");
    }
    int seconds = new Long(((((dif % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60))) % (1000 * 60)) / 1000).intValue();
    if ((hours == 0 || showSecond) && seconds != 0) {
        buffer.append(seconds).append("秒");
    }
    return buffer.toString();
}

/**
 * 获取今天还剩下多少秒
 * 
 * @return
 */
public static int getMiao() {
    Calendar curDate = Calendar.getInstance();
    Calendar tommorowDate = new GregorianCalendar(curDate.get(Calendar.YEAR), curDate.get(Calendar.MONTH),
            curDate.get(Calendar.DATE) + 1, 0, 0, 0);
    return (int) (tommorowDate.getTimeInMillis() - curDate.getTimeInMillis()) / 1000;
}

/**
 * 
 * 获取指定某一天的开始时间 00:00:00
 * 
 * @return
 * @throws ParseException
 */
public static Date getSpecificStartDate(Date specificDate) throws ParseException {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(specificDate);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

/**
 * 
 * 获取指定某一天的结束时间 23:59:59
 * 
 * @return
 * @throws ParseException
 */
public static Date getSpecificEndDate(Date specificDate) throws ParseException {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(specificDate);
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 59);
    calendar.set(Calendar.MILLISECOND, 999);
    return calendar.getTime();
}

/**
 * 
 * 获取指定某一天的开始时间 00:00:00
 * 
 * @return
 * @throws ParseException
 */
public static Date getSpecificStartDate(String strSpecificDate) throws ParseException {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(DateUtils.toDate(strSpecificDate, TIME_PATTERN_DAY));
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

/**
 * 
 * 获取指定某一天的结束时间 23:59:59
 * 
 * @return
 * @throws ParseException
 */
public static Date getSpecificEndDate(String strSpecificDate) throws ParseException {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(DateUtils.toDate(strSpecificDate, TIME_PATTERN_DAY));
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 59);
    calendar.set(Calendar.MILLISECOND, 999);
    return calendar.getTime();
}

/**
 * 获取当前时间
 * 
 * @return 返回当前时间,Date类型
 */
public static Date getCurrentDateTime() {
    java.util.Calendar calNow = java.util.Calendar.getInstance();
    java.util.Date dtNow = calNow.getTime();
    return dtNow;
}

/**
 * 计算两个日期之间相差的秒数
 * 
 * @param data1
 *            时间1
 * @param data2
 *            时间2
 * @return 相差秒数
 * @throws ParseException
 *             转换异常
 */
public static long secondsBetween(Date data1, Date data2) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(data1);
    long time1 = cal.getTimeInMillis();
    cal.setTime(data2);
    long time2 = cal.getTimeInMillis();
    long betweenSeconds = (time2 - time1) / 1000;

    return Math.abs(betweenSeconds);
}

/**
 * 
 * 获取当天的开始时间 00:00:00
 * 
 * @return 获取当天的开始时间
 * @throws ParseException
 *             转换异常
 */
public static Date getTodayStartDate() throws ParseException {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

/**
 * 
 * 获取当天的结束时间 23:59:59
 * 
 * @return
 * @throws ParseException
 */
public static Date getTodayEndDate() throws ParseException {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 59);
    calendar.set(Calendar.MILLISECOND, 999);
    return calendar.getTime();
}

/**
 * 
 * stampToDate:long类型的字符串转换为yyyy-MM-dd HH:mm:ss格式的日期字符串. <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param longStr
 * @return
 */
public static String stampToDate(String longStr) {
    if (ObjectUtils.isNullOrEmpty(longStr)) {
        return "";
    }
    String result;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(TIME_PATTERN_DISPLAY);
    long lt = new Long(longStr);
    Date date = new Date(lt);
    result = simpleDateFormat.format(date);
    return result;
}

/**
 * 
 * formatStayTime:停留时间格式转换. <br/>  
 * TODO主要用于数据追踪.<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param stayTime 停留时间
 * @return
 */
public static String formatStayTime(String stayTime) {
    if (ObjectUtils.isNullOrEmpty(stayTime)) {
        return "00:00:00";
    }
    long lt = new Long(stayTime);
    long hour = lt / (3600*1000);
    long minutes = (lt % (3600*1000)) / (60*1000);
    long seconds = ((lt % (3600*1000)) % (60*1000)) / 1000;
    Format format = new DecimalFormat("00");
    return format.format(hour) + ":" + format.format(minutes) + ":" + format.format(seconds);
}
/**
 * 
 * @Title: getDateStr
 * @Description: TODO(转化时间显示,当天显示时分,今年显示月日,其他显示年月日)
 * @param @param time
 * @param @return
 * @param @throws ParseException    参数
 * @return String    返回类型
 * @throws
 */
public static String getDateStr(Date time) throws ParseException {
	String timestr ="";
	if(!ObjectUtils.isNullOrEmpty(time)){
		Date n = new Date();
		Date st = getTodayStartDate();
		Date end = getTodayEndDate();
		Calendar c1 = Calendar.getInstance();
		c1.setTime(n);
		Calendar c2 = Calendar.getInstance();
		c2.setTime(time);
        int y1 = c1.get(Calendar.YEAR); 
        int y2 = c2.get(Calendar.YEAR); 
        if(st.getTime()<=time.getTime()&& time.getTime()<=end.getTime()){
			timestr = formatDate(time, "HH:mm");
		}else if(y1==y2){
			timestr = formatDate(time, "MM-dd");
		}else {
			timestr = formatDate(time, "yyyy-MM-dd");
		}
		
	}
	return timestr;
}
/**
 * 
 * @Title: getAfterNDays
 * @Description: TODO(获取n天以后的日期 )
 * @param @param n
 * @param @return    参数
 * @return Date    返回类型
 * @throws
 */
public static String getAfterNDays(Integer n) {
	Calendar calendar2 = Calendar.getInstance();
	SimpleDateFormat sdf2 = new SimpleDateFormat(TIME_PATTERN_DISPLAY);
	calendar2.add(Calendar.DATE, n);
	String three_days_after = sdf2.format(calendar2.getTime());
	return three_days_after;
}

/**
 * 
 * getBeforeNMonth:(根据指定日期获取几个月前的时间,如果指定日期为空,则返回当前日期前几个月前的时间). <br/>  
 * TODO(返回日期格式为:yyyy-MM-dd).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time 指定日期
 * @param n 几个月
 * @return
 */
public static String getBeforeNMonth(Date time, Integer n) {
    //如果指定日期为空,则设置为当前日期
    if (ObjectUtils.isNullOrEmpty(time)) {
        time = new Date();
    }
    //如果n为空则直接返回转换为后日期
    if (ObjectUtils.isNullOrEmpty(n) || n == 0) {
        return formatDate(time, DateUtils.TIME_PATTERN_DISPLAY);
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(time);
    calendar.add(Calendar.MONTH, -n);
    return formatDate(calendar.getTime(), DateUtils.TIME_PATTERN_DISPLAY);
}

/**
 * 
 * getsettlementDayByWeek:(根据日期及小时数获取按周统计的结算时间). <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time 时间
 * @param hour 结算小时数
 * @return
 */
public static Date getSettlementDayByWeek(Date time, int hour) {
    if (ObjectUtils.isNullOrEmpty(time)) {
        return null;
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(time);  
    // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了  
    int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天  
    if (1 == dayWeek) {  
        calendar.add(Calendar.DAY_OF_MONTH, -1);  
    }
    calendar.setFirstDayOfWeek(Calendar.FRIDAY);  
    int day = calendar.get(Calendar.DAY_OF_WEEK);
    calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - day);
    //根据传入小时数
    if (!ObjectUtils.isNullOrEmpty(hour)) {
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
    }
    Date friday = calendar.getTime();
    if (friday.before(time)) {
        return getAfterWeekDate(friday);
    }
    return calendar.getTime();
}

/**
 * 
 * getAfterWeekDate:(根据指定时间获取一周后的时间). <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time
 * @return
 */
public static Date getAfterWeekDate(Date time) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(time);
    calendar.add(Calendar.WEEK_OF_MONTH, 1);
    return calendar.getTime();
}

/**
 * 
 * getAfterWeekDate:(根据指定时间获取一周前的时间). <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time
 * @return
 */
public static Date getBeforeWeekDate(Date time) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(time);
    calendar.add(Calendar.WEEK_OF_MONTH, -1);
    return calendar.getTime();
}

/**
 * 
 * getAfterMonthDate:(根据指定时间获取下一个月时间). <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time
 * @return
 */
public static Date getAfterMonthDate(Date time) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(time);
    calendar.add(Calendar.MONTH, 1);
    return calendar.getTime();
}

/**
 * 
 * getDefaultEndDate:(根据指定时间获取指定小时的时间). <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time
 * @return
 */
public static Date getTimeByDate(Date time, int hour) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(time);
    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar.getTime();
}

/**
 * 
 * getMonthFirstDay:(获取日期当月第一天的时间). <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time
 * @param pattern
 * @return
 */
public static String getMonthFirstDay(Date time, String pattern) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(time);
    // 设置当月第一天
    int first = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
    calendar.set(Calendar.DAY_OF_MONTH, first);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return formatDate(calendar.getTime(), pattern);
}

/**
 * 
 * getMonthWeek:(根据时间获取时间所在月份第几周). <br/>  
 * TODO(这里描述这个方法适用条件 – 可选).<br/>  
 * TODO(这里描述这个方法的执行流程 – 可选).<br/>  
 * TODO(这里描述这个方法的使用方法 – 可选).<br/>  
 * TODO(这里描述这个方法的注意事项 – 可选).<br/>  
 *  
 * @author buildmost008  
 * @param time 时间
 * @return
 */
public static String getMonthWeek(Date time) {
    if (ObjectUtils.isNullOrEmpty(time)) {
        return null;
    }
    GregorianCalendar calendar = (GregorianCalendar) Calendar.getInstance();
    calendar.setTime(time);
    int originalMonth = calendar.get(2) + 1;
    int month = originalMonth;
    int originalWeek = calendar.get(Calendar.WEEK_OF_MONTH);
    int week = originalWeek;
    
    int original_week_index = calendar.get(Calendar.DAY_OF_WEEK); 
    //如果传入时间是周五且时间是下午6点之后,或者周六,则所属周+1
    calendar.set(Calendar.HOUR_OF_DAY, SummaryConstant.SUMMARY_TYPE_WEEK_END_HOUR);
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0); 
    if ((time.after(calendar.getTime()) && original_week_index == 6) || original_week_index == 7) {
        week = originalWeek + 1; 
    } 

    boolean isBefore = false;
    
    // 获取当月第一天
    int first = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
    calendar.set(Calendar.DAY_OF_MONTH, first);
    
    //设置时间为18点
    Date firstDay = calendar.getTime();
    calendar.set(Calendar.HOUR_OF_DAY, SummaryConstant.SUMMARY_TYPE_WEEK_END_HOUR);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    //如果当月第一天不是在传入时间之后,则标记为之前
    if (!firstDay.after(calendar.getTime())) {
        isBefore = true;
    }
    
    int week_index = calendar.get(Calendar.DAY_OF_WEEK);
    //如果当月第一天不是周三及以后,则归属为上一周
    if (week_index > 3 && week_index < 7) {
        week = week - 1;
    }
    //如果所在周为第一周,则归属为上一个月
    if (isBefore && week == 0) {
        month = calendar.get(2);
        int last = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(Calendar.DAY_OF_MONTH, last);
        week = calendar.get(Calendar.WEEK_OF_MONTH);
    }
    
    calendar.setTime(time);
    int last = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    calendar.set(Calendar.DAY_OF_MONTH, last);
    int lastWeek = calendar.get(Calendar.WEEK_OF_MONTH);
    int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
    //如果当月最后一天为周二之前,周四之后,则归属为下一个月
    if (lastWeek == week && month == originalMonth && (weekDay < 2 || weekDay > 5)) {
        calendar.add(Calendar.MONTH, 1);
        month = calendar.get(2) + 1;
        week = 1;
    }
    return month + "月第" + week + "周";
}

}

【参数配置】OpenClaw 的破解之道(Doom Loop) 本文深入解析了OpenClaw中的Doom Loop(死循环)问题及其应对策略。主要内容包括: Agent Loop的核心概念:基于ReAct范式,OpenClaw通过"思考-行动-观察"循环执行任务,但可能陷入无进展的死循环。 Doom Loop现象:Agent持续执行但任务进度为零,常见于四种工具调用场景:相同调用重复执行、调用不存在工具、轮询工具卡死、操作交替振荡。 OpenClaw的防御机制: 第一道防线:重试端断路器,通过上下文压缩熔断(最多3次)和总重试次数熔断(32-160次)防止无限重试。 阅读详情

相关推荐

别再手动查日志了!用Dify+Zabbix打造你的专属运维“嘴替”(保姆级配置流程)

本文详细介绍了如何利用Dify平台与Zabbix监控系统集成,构建智能运维对话系统,实现自然语言交互的运维管理。通过保姆级配置流程,帮助运维工程师提升查询效率、降低学习成本,打造企业级智能运维解决方案。

weixin_27298377的博客 457

已解决java.lang.IllegalArgumentException异常的正确解决方法,亲测有效!!!

IllegalArgumentException是由于传递给方法的参数非法或不正确而引发的,要解决这个问题,需要在调用方法前验证输入,并在方法内部使用断言来检查参数的有效性。

小明的Java问道之路 3万+

ESP32 WiFi自平衡小车硬件与PID控制实战

自平衡小车是典型的嵌入式实时反馈控制系统,其核心依赖姿态感知(如MPU6050)、电机驱动(如L298N)与闭环控制算法(如PID)的协同。系统通过IMU采集俯仰角,经互补滤波融合处理,再由PID控制器实时计算PWM输出,驱动直流电机产生恢复力矩;WiFi模块(ESP32内置)则提供远程遥控接口,实现AP模式下的Web指令交互。该架构兼具硬实时性(毫秒级采样与响应)与软实时性(HTTP服务),广泛应用于机器人教学、智能小车开发及边缘控制原型验证。本文围绕ESP32平台,详解传感器接口、驱动电路设计、PID抗

weixin_42509513的博客 393

java.lang.IllegalArgumentException 如何解决这个异常

很多人说这个异常是spring版本和jdk版本不一致导致的,其实不然你可以运行一下这一段代码 public static void main(String[] args) { String timeStamp = "1531782000000";//直接是时间戳 // long timeStamp = System.currentTim...

废墟中的猫 40万+

系统-等保三级-CentOS Linux 7合规基线检查 shell脚本

系统-等保三级-CentOS Linux 7合规基线检查 shell脚本

swindy博客 2409

Spring Authorization Server 实战指南:构建企业级 OAuth2/OIDC 授权中心

本文介绍了Spring Authorization Server作为构建企业级OAuth2/OIDC授权中心的解决方案。首先分析了传统认证模式的不足和OAuth2/OIDC协议的优势,然后详细讲解了如何从零搭建授权服务器,包括核心配置类、授权流程、数据库持久化等关键实现。文章还涵盖了资源服务器配置、客户端应用集成、安全最佳实践以及生产环境部署建议,完整呈现了Spring Authorization Server的核心功能和使用场景。通过本教程,开发者可以掌握统一认证授权系统的构建方法,为微服务架构提供安全可

qq_39476913的博客 783

错误提示:java.lang.IllegalArgumentException解决方法

我的程序出现这个错误的原因是编译环境和运行环境的jdk版本不一致,首先是spring mvc的版本是3.*的,而我本机的jdk是jdk8,查阅资料后得知他俩的兼容性不是很好,有问题,只能用jdk7及以下的版本,所以我就在myeclipse中直接导入了一个jdk1.7,但是这样依然没有解决,这是因为,这样导入后,我的运行环境和编译环境不一致,所以就要经过以下的设置: 选中项目,单击右键-》Prope

飞翔射手座 22万+

一文读懂 SAP ERP / SAP S/4HANA 里的 Price List:概念、配置、定价流程与可运行 ABAP 示例

SAP ERP/S4HANA中的Price List解析 本文系统阐述了SAP定价体系中Price List的核心概念和实现机制。Price List并非独立的价目表,而是通过条件技术(条件类型、访问序列、条件记录)与Price List Type(PLTYP)共同作用的定价维度。文章详细说明了: Price List本质上是客户主数据中的PLTYP字段,作为定价查找键使用 定价流程中条件访问序列如何利用PLTYP查找特定价格 S4HANA与ECC版本在价格维护入口的差异 实际业务中如何通过不同PLTYP实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 663

Java 某天的开始时间与结束时间

需求中遇到“有效期”的时候就可能要用到一天的开始时间跟结束时间。     比如说:价格优惠活动,一件商品打折优惠期间是2016-11-18到2016-11-30,那么我们数据库存入的时间就应该是2016-11-18日的开始时间跟2016-11-30日的结束时间。 具体实现为: Calendar calendarFrom = Calendar.getInstance();

u011663693的博客 5539

QNX侧触摸屏(TP)Bringup流程与源码深度解析

QNX侧TP Bringup的核心在于构建。

QQ_778132974的博客 479

第154章 点云大规模并行处理(GPU加速)

优化点云处理✨ 使用。

yumeiguo的博客 374

时间操作,根据起始--结束时间按周划分

需求是这样的,从数据库查到课程的开始和结束时间然后根据周来划分,先初步划分出时间 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd" ); //判断开始日期是周几 //开始时间 Calendar c= Calendar.getInstance(); c.set...

qq_42240818的博客 2209

华为OD机试 - 去除多余空格(Python/JS/C/C++ 2024 E卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。条件约束:输入为两行字符串:第一行:待去除多余空格的文本,用例保证如果有单引号,则单引号成对出现,且单引号可能有多对。 第二

学Java,找哪吒 1217

javascript根据开始时间、结束时间、间隔时间(秒)得到多个时间点

提示:里面的加入开始时间、加入结束时间、时间间隔范围(默认60秒),请根据实际情况自行修改 不废话。直接上代码 function getDateArray(startDate, endDate, space) { if (!endDate) { endDate = new Date(); } if (!startDate) { star...

Shelly Long的博客 1872

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

获取日期的开始时间,结束时间

String day = "2020-03-24"; String s = DateUtil.formatDateTime(DateUtil.parseDate(day)); System.out.println("s========="+s); String s1 = DateUtil.formatDateTime(DateUtil.getEndOfDate(Da...

正在改bug的博客 562

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

FREERTOS---时间片调度与时间管理

在FreeRTOS中,时间管理是任务调度和系统运行的重要组成部分。FreeRTOS提供了获取系统时间和进行节拍时间换算的多种方法,以便开发者更方便地对时间进行操作。以下是详细说明和示例。FreeRTOS的时间片调度和时间管理机制在实时系统中至关重要。通过合理配置时间片长度、使用时间管理API,可以实现高效的任务切换和准确的定时操作。在设计时需根据系统实时性和任务特点,选择合适的调度方式和时间管理策略,以实现最佳性能。

wallwayj的博客 2668

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

获取本年本月本季度的开始时间以及去年上月上季度的开始和结束时间

直接上代码 private static final String TIME_OF_DAY_BEGIN = " 00:00:00"; private static final String TIME_OF_DAY_END = " 23:59:59"; private static final Calendar calendar = Calendar.getInstance(); // 当前月所在季度 private static final Map<Integer,Integer> qua

Y_vocefenrir的博客 730

php获取当天的开始时间和结束时间

//当天开始时间 $start_time=strtotime(date("Y-m-d",time())); //当天结束之间 $end_time=$start_time+60*60*24; echo $start_time; 1541001600 echo $end_time; 1541088000 $start_time=date("Y-m-d H:i:s...

cmj8043719242的博客 1万+

mysql获取某天的开始时间和结束时间

mysql 根据date获取当天开始时间和结束时间 SELECT str_to_date(DATE_FORMAT(NOW(),'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'); SELECT DATE_ADD(DATE_ADD(str_to_date(DATE_FORMAT(NOW(),'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'),INTERVAL 1 D...

Default6的博客 3783

用JAVA获取当天开始时间和结束时间

package com.tf.medicaworkers.utils; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class TimeUtils { public static Date getStartTime() { Calendar todayStart = Calendar.getInstance(); toda.

qq_37145715的博客 1776

PHP获取前一天的开始和结束时间

/* * 获取前一天的开始和结束时间 */ function getLastTime() { $str=date("Y-m-d",strtotime("-1 day"))." 0:0:0"; $data["star"]=strtotime($str); $str=date("Y-m-d",strtotime("-1 day"))." 24:00:00&

jerryyang_2017的博客 7208

PHP 获取今天的开始和结束时间

/** * 获取今天的开始和结束时间 * @return [type] [description] */ function getTime() { $star_time = date("Y-m-d H:i:s", mktime(0, 0, 0, date('m'), date('d'), date('Y'))); $end_time = date("Y-m-d H:i:s", m...

星辰之海_的博客 2261

(九)FreeRTOS 时间管理

在前面的章节实验例程中,频繁地使用了 FreeRTOS 提供的延时函数,使用延时函数会使得任务进入阻塞态,直至延时完成,任务才会重新进入就绪态。FreeRTOS 是如何对延时任务进行阻塞的,又是如何判断任务延时超时的,这些都是属于 FreeRTOS 时间管理的相关内容。

小新的博客 1294

获取当天的开始、结束时间以及前几天的开始和结束时间的毫秒数,

1.获取今天的开始时间: letnowDayStartMs=newDate(newDate().toLocaleDateString()).getTime() //1582732800000 2.获取今天的结束时间: //今天23:59:59 letnowDayEndMs=newDate(newDate().toLocaleDateString()).getTi...

jagger_guo的博客 915

计算当前周、月、季、半年、一年和上周、上月、上季、当前半年的上一个半年、上年的开始和结束时间

下面的例子是一个完整的工具类,记录了各种获取开始时间和结束时间的方法,其中本人用过的个别方法为开始时间和结束时间格式为 2019-10-10 00:00:00 ,2019-10-10 23:59:59,最下方有测试类,可以先执行一下,根据自己的需要去修改 package cn.shangze.gf.common.utils; import lombok.extern.slf4j.Slf4j;...

FengRenYuanDeFZ的博客 1205

php 根据年份获取每周的开始时间和结束时间

原本觉得这个函数是在网上能随便就能找到的,谁知道千篇一律的都是那个函数,而且发现如果今年是2018,那么2018至后面的年份根本就得不各周的开始和结束时间戳 数组。所以自己写了!但是算法方面应该可以优化! 如下直接甩函数(如果可以优化,请帮忙给出优化的函数,谢谢!): function get_week($year) { //获取当年第一天的日期 $yearF...

leo_jk的博客 1549
上一篇: java生成图片验证码
下一篇: js获取网页url
无悔_人生
博客等级 码龄8年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无悔_人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值