美文网首页
java时间工具类记录

java时间工具类记录

作者: 随记草堂 | 来源:发表于2022-11-16 23:08 被阅读0次

    本章主要是基于java8中的一些时间类,写的一些常用的时间转换、时间计算的方法。比如LocalDateTime,LocalDate,Date等。

    在开发的很多时候,经常会遇到一些时间的计算和转换,像多少天后是星期几,两个日期相差天数,时间戳转为Date日期类型等等,每次遇到都需要翻看以往的项目代码查找。故在此做一下简单的记录。

    1.LocalDateTime类

    public class LocalDateTimeTool {

    public static void main(String[] args) {

    System.out.println(getCurrentDateTime());

    System.out.println(getLocalDateTimeByString("2022-05-05 15:35:20.222", FormatPattern.DATE_TIME_FORMAT.getFormat()));

    }

    /**

    * 获取当前日期: yyyy-mm-dd hh:mm:ss.SSS

    * @return

    */

    public static LocalDateTime getCurrentDateTime() {

    return LocalDateTime.now();

    }

    /**

    * 字符串转LocalDate

    * @return

    */

    public static LocalDateTime getLocalDateTimeByString(String dateString, String format){

    if (format == null) {

    format = FormatPattern.DATE_TIME_FORMAT.getFormat();

    }

    return LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern(format));

    }

    /**

    * LocalDateTime转Date: 默认格式

    * @param date

    * @return

    */

    public static Date getDateByLocalDateTime(LocalDateTime date){

    return Date.from(date.atZone(ZoneId.systemDefault()).toInstant());

    }

    /**

    * Date 转 LocalDateTime

    * @param date

    * @return

    */

    public static LocalDateTime getLocalDateTimeByDate(Date date){

    return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

    }

    /**

    * 日期时间(LocalDateTime)按指定格式转字符串

    *

    * @param dateTime

    * @param format

    * @return

    */

    public static String getStringBylocalDateTime(LocalDateTime dateTime, String format) {

    String dateString;

    if (dateTime == null) {

    dateString = "";

    } else {

    DateTimeFormatter formatDate = DateTimeFormatter.ofPattern(format);

    dateString = dateTime.format(formatDate);

    }

    return dateString;

    }

    /**

    * Date 相差xxx天的日期

    * @param date

    * @param value

    * @param unit

    * @return LocalDateTime

    */

    public static LocalDateTime getDifferValueOfDateForLocalDateTime(Date date, Integer value, ChronoUnit unit){

    LocalDateTime localDateTime = getLocalDateTimeByDate(date);

    return localDateTime.plus(value, unit);

    }

    /**

    * LocalDateTime 转 LocalDate

    * @param localDateTime

    * @return

    */

    public static LocalDate getLocalDateByLocalDateTime (LocalDateTime localDateTime) {

    return localDateTime.toLocalDate();

    }

    }

    public enum FormatPattern {

    DATE_TIME_FORMAT("yyyy-MM-dd HH:mm:ss"),

    DATETIME_FORMAT("yyyyMMddHHmmss"),

    DATE_FORMAT("yyyy-MM-dd"),

    DATEFORMAT("yyyyMMdd"),

    ;

    private String format;

    private FormatPattern(String format) {

    this.format = format;

    }

    public String getFormat() {

    return format;

    }

    }


    2.LocalDateTime类

    public class LocalDateTool {

    public static void main(String[] args) {

    System.out.println(getCurrentDate());

    System.out.println(getLocalDateByString("2015-01-01"));

    System.out.println(getDateByLocalDate(LocalDate.now()));

    System.out.println(getStartOrEndOfWeek(null, true));

    System.out.println(getStartOrEndOfMonth(null, false));

    System.out.println(getStartOrEndOfQuarter(null, false));

    System.out.println(getStartOrEndOfYear(null, false));

    System.out.println(getInstantFromLocalDate(getCurrentDate()));

    System.out.println(getDifferValueOfDateForLocalDate(new Date(), -5, ChronoUnitDateEnum.MONTHS));

    System.out.println(getDifferValueOfDateForLocalDate(new Date(), -5, ChronoUnitDateEnum.YEARS));

    System.out.println(getDifferValueOfDateForLocalDate(new Date(), 14, ChronoUnitDateEnum.DAYS));

    }

    /**

    * 获取当前日期: yyyy-mm-dd

    * @return

    */

    public static LocalDate getCurrentDate() {

    return LocalDate.now();

    }

    /**

    * 字符串转LocalDate

    * @return

    */

    public static LocalDate getLocalDateByString(String dateString){

    return LocalDate.parse(dateString);

    }

    /**

    * LocalDate转Date: 默认格式

    * @param date

    * @return

    */

    public static Date getDateByLocalDate(LocalDate date){

    return Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());

    }

    /**

    * Date 转 LocalDate

    * @param date

    * @return

    */

    public static LocalDate getLocalDateByDate(Date date){

    return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

    }

    /**

    * Date 相差xxx天的日期

    * @param date

    * @param value

    * @param unit

    * @return LocalDate

    */

    public static LocalDate getDifferValueOfDateForLocalDate(Date date, Integer value, ChronoUnitDateEnum unit){

    LocalDate localDate = getLocalDateByDate(date);

    switch (unit.getUnit()) {

    case DAYS:

    return localDate.plusDays(value);

    case WEEKS:

    return localDate.plusWeeks(value);

    case MONTHS:

    return localDate.plusMonths(value);

    case YEARS:

    return localDate.plusYears(value);

    default:

    return localDate;

    }

    }

    /**

    * 获取当前周 开始时间和结束时间

    * @param date 日期

    * @param isFirstDayOfWeek 是否开始

    * @return

    */

    public static LocalDate getStartOrEndOfWeek(LocalDate date , Boolean isFirstDayOfWeek){

    LocalDate now = LocalDate.now();

    if (date == null){

    date = now;

    }

    DayOfWeek dayOfWeek = date.getDayOfWeek();

    int value = dayOfWeek.getValue();

    if (isFirstDayOfWeek){

    now = date.minusDays(value - 1);

    }else {

    now = date.plusDays(7 - value);

    }

    return now;

    }

    /**

    * 获取当前周 开始时间和结束时间

    * @param date 日期

    * @param isFirstDayOfMonth 是否开始

    * @return

    */

    public static LocalDate getStartOrEndOfMonth(LocalDate date , Boolean isFirstDayOfMonth){

    LocalDate now = LocalDate.now();

    if (date == null){

    date = now;

    }

    if (isFirstDayOfMonth){

    now = date.withDayOfMonth(1);

    }else {

    now = date.with(TemporalAdjusters.lastDayOfMonth());

    }

    return now;

    }

    /**

    * 获取当前周 开始时间和结束时间

    * @param date 日期

    * @param isFirstDayOfQuarter 是否开始

    * @return

    */

    public static LocalDate getStartOrEndOfQuarter(LocalDate date , Boolean isFirstDayOfQuarter) {

    LocalDate now = LocalDate.now();

    if (date == null){

    date = now;

    }

    Month month = date.getMonth();

    Month firstMonthOfQuarter = month.firstMonthOfQuarter();

    Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);

    if (isFirstDayOfQuarter){

    now = LocalDate.of(date.getYear(), firstMonthOfQuarter, 1);

    }else {

    now = LocalDate.of(date.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(date.isLeapYear()));

    }

    return now;

    }

    /**

    * 获取当前周 开始时间和结束时间

    * @param date 日期

    * @param isFirstDayOfYear 是否开始

    * @return

    */

    public static LocalDate getStartOrEndOfYear(LocalDate date , Boolean isFirstDayOfYear){

    LocalDate now = LocalDate.now();

    if (date == null){

    date = now;

    }

    if (isFirstDayOfYear){

    now = LocalDate.of(date.getYear(), Month.JANUARY, 1);

    }else {

    now = LocalDate.of(date.getYear(), Month.DECEMBER, Month.DECEMBER.length(date.isLeapYear()));

    }

    return now;

    }

    /**

    * LocalDate 转换成 Instant时间戳

    * @param date

    * @return

    */

    public static Instant getInstantFromLocalDate(LocalDate date){

    return date.atStartOfDay().toInstant(ZoneOffset.UTC);

    }

    }

    public enum ChronoUnitDateEnum {

    DAYS(ChronoUnit.DAYS),

    WEEKS(ChronoUnit.WEEKS),

    MONTHS(ChronoUnit.MONTHS),

    YEARS(ChronoUnit.YEARS),

    ;

    private ChronoUnit unit;

    private ChronoUnitDateEnum(ChronoUnit unitType) {

    this.unit = unitType;

    }

    public ChronoUnit getUnit() {

    return unit;

    }

    }


    3.LocalTime

    public class LocalTimeTool {

    public static void main(String[] args) {

    System.out.println(getCurrentTime());

    System.out.println(getLocalTimeByString("20:15:15.256"));

    System.out.println(getDifferValueOfTimeForLocalTime(getCurrentTime(), 50, ChronoUnitTimeEnum.MINUTES));

    }

    /**

    * 获取当前时间: hh:mm:ss.SSS

    * @return

    */

    public static LocalTime getCurrentTime() {

    return LocalTime.now();

    }

    /**

    * 字符串转LocalTime

    * @return

    */

    public static LocalTime getLocalTimeByString(String dateString){

    return LocalTime.parse(dateString);

    }

    /**

    * LocalTime 相差XXX的时间

    * @param time

    * @param value

    * @param unit

    * @return

    */

    public static LocalTime getDifferValueOfTimeForLocalTime(LocalTime time, Integer value , ChronoUnitTimeEnum unit){

    switch (unit.getUnit()) {

    case SECONDS:

    return time.plusSeconds(value);

    case MINUTES:

    return time.plusMinutes(value);

    case HOURS:

    return time.plusHours(value);

    default:

    return time;

    }

    }

    }

    public enum ChronoUnitTimeEnum {

    SECONDS(ChronoUnit.SECONDS),

    MINUTES(ChronoUnit.MINUTES),

    HOURS(ChronoUnit.HOURS),

    ;

    private ChronoUnit unit;

    private ChronoUnitTimeEnum(ChronoUnit unitType) {

    this.unit = unitType;

    }

    public ChronoUnit getUnit() {

    return unit;

    }

    }

    相关文章

      网友评论

          本文标题:java时间工具类记录

          本文链接:https://www.haomeiwen.com/subject/zmpuxdtx.html