DateUtil工具类

package com.util;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @description handle of date util.
 */
public class DateUtil {
private static String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static String DATE_FORMAT = "yyyy-MM-dd";

/**
* get current time format "yyyy-MM-dd HH:mm:ss".
* @return
*/
public static Date current() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MILLISECOND, 000);
return cal.getTime();
}
/**
* Get the previous time, from how many days to now.
* 
* @param days How many days.
* @return The new previous time.
*/
public static Date previous(int days) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -days);
return cal.getTime();
}
public static Date previousDate(int days, Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, -days);
return cal.getTime();
}

/**
* get field of date by calendar class
* 
* @param calendarField   The field of calendar
* 
* For the date fields: 
*                      YEAR/MONTH
*                      
*                      星期数指定
*                      WEEK_OF_YEAR(指示当前年中的星期数)
*                      WEEK_OF_MONTH(指示当前月中的星期数)
*                      
*                      天数指定
*                      DAY_OF_YEAR(指示当前年中的天数)
*                      DAY_OF_MONTH(指示一个月中的某天)
*                      DAY_OF_WEEK_IN_MONTH(指示当前月中的第几个星期)
*                      DAY_OF_WEEK(指示一个星期中的某天)
*                      
*                      
* For the time of day fields:
*                            HOUR_OF_DAY(指示一天中的小时)
*                            AM_PM + HOUR
*                            
*                            
* @param days   The number of days
* @return  date of transform calendar field.
*/
public static Date getFieldDateFromCurrent(int calendarField, int days) {
Calendar cal = Calendar.getInstance();
cal.add(calendarField, days);
return cal.getTime();
}

/**
* current Date forward some minutes
* 
* @param mins
*            The number of forward minute.
* @return Been forward new Date.
*/
public static Date forwardMin(int mins) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, mins);
return cal.getTime();
}
/**
* 取得当前周的周六、日日期
* 
* @param date  默认为当前,也可以指定未来
* @return  包含两天的日期(六、日)
*/
public static List<Date> getCurrentWeekend(Date date) {
List<Date> weekend = new ArrayList<Date>();
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.SUNDAY);
if(RegexUtil.notEmpty(date))cal.setTime(date);
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
weekend.add(cal.getTime());
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()+6);
weekend.add(cal.getTime());
return weekend;
}

/**
* Convert date and time to string like "yyyy-MM-dd HH:mm:ss".
*/
public static String formatDateTime(Date d) {
return new SimpleDateFormat(DATETIME_FORMAT).format(d);
}

/**
* Convert date and time to string like "yyyy-MM-dd HH:mm:ss".
*/
public static String formatDateTime(long d) {
return new SimpleDateFormat(DATETIME_FORMAT).format(d);
}

/**
* Convert date to String like "HH:mm:ss".
*/
public static String formatCurDateToTime() {
Calendar cal = Calendar.getInstance();
return String.format("%tR", cal);
}

    /**
     * Convert date to String like "yyyy-MM-dd".
     */
    public static String formatCurDate() {
        Calendar cal = Calendar.getInstance();
        return new SimpleDateFormat(DATE_FORMAT).format(cal.getTime());
    }

public static int getField(int calendarField, Date date) {
int field = 0;
Calendar cal = Calendar.getInstance();
if(RegexUtil.notEmpty(date)) cal.setTime(date);
field = cal.get(calendarField);
if(calendarField == Calendar.MONTH) field++;
return field;
}

/**
* Convert date to String like "yyyy-MM-dd".
*/
public static String formatDate(Date d) {
return new SimpleDateFormat(DATE_FORMAT).format(d);
}

/**
* Convert date to String like "yyyy-MM-dd".
*/
public static String forMatDate() {
return new SimpleDateFormat(DATE_FORMAT).format(new Date());
}

/**
* Parse date like "yyyy-MM-dd".
*/
public static Date parseDate(String d) {
Calendar cal = Calendar.getInstance();
String[] str = d.split("-");
cal.set(Integer.parseInt(str[0]), Integer.parseInt(str[1])-1, Integer.parseInt(str[2]));
return cal.getTime();
}

/**
* Parse date and time like "yyyy-MM-dd HH:mm:ss".
*/
public static Date parseDateTime(String dt) {
try {
return new SimpleDateFormat(DATETIME_FORMAT).parse(dt);
} catch (Exception e) {
}
return null;
}
//获取季度
public static int getQuarter(Date date) {
Calendar cal = Calendar.getInstance();
if(RegexUtil.notEmpty(date)) cal.setTime(date);
int month = cal.get(Calendar.MONTH) + 1;
int quarter = 1;
if(month >= 1 && month <= 3) quarter = 1;
else if(month >= 4 && month <= 6) quarter = 2;
else if(month >= 7 && month <= 9) quarter = 3;
else if(month >= 10 && month <= 12) quarter = 4;
return quarter;
} 
}
### Python `dateutil` 工具类使用方法 #### 安装 为了使用 `dateutil` 库,首先需要安装它。可以通过 pip 来完成这一操作: ```bash pip install python-dateutil ``` #### 基本功能展示 ##### 解析日期字符串 `dateutil.parser.parse()` 函数能够解析多种格式的日期字符串并返回对应的 datetime 对象。 ```python from dateutil import parser date_string = "2023-10-01T14:30Z" parsed_date = parser.parse(date_string) print(parsed_date) # 输出:2023-10-01 14:30:00+00:00 ``` ##### 复杂的时间计算 利用 `relativedelta` 可以方便地执行复杂的日期运算,比如增加或减少月份、年份等。 ```python from dateutil.relativedelta import relativedelta from datetime import datetime current_time = datetime.now() future_time = current_time + relativedelta(months=+6, days=-5) print(future_time.strftime("%Y-%m-%d %H:%M")) # 根据需求调整输出格式 ``` ##### 获取重复事件序列 对于周期性的活动安排,如每周一次会议,则可借助 rrule 功能来获取一系列发生时刻。 ```python from dateutil.rrule import rrule, WEEKLY from datetime import timedelta, datetime start_day = datetime(2023, 9, 1) end_day = start_day + timedelta(days=7*8) # 计划八周内的所有周五 weekly_meetings = list(rrule(freq=WEEKLY, byweekday=start_day.weekday(), dtstart=start_day, until=end_day)) for meeting in weekly_meetings: print(meeting.date()) ``` 以上展示了如何通过 `dateutil` 实现基本的日期解析、复杂时间间隔计算以及规律性事件列表生成等功能[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值