Java 进行时间处理

一、Calendar

(1)、Calender介绍

Calendar的中文翻译是日历,实际上,在历史上有着许多种计时的方法。所以为了计时的统一,必需指定一个日历的选择。那现在最为普及和通用的日历就是"Gregorian Calendar"。也就是我们在讲述年份时常用"公元**年"。Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。Calendar.getInstance()中所获得的实例就是一个"GreogrianCalendar"对象。

(2)、简单的日期使用

Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.DATE));//-----------------------今天是几号
System.out.println(cal.get(Calendar.DAY_OF_MONTH));//---------------今天是一月的第几天
System.out.println(cal.get(Calendar.DAY_OF_WEEK));//----------------从星期天开始计算,如果今天星期二,那么返回3
System.out.println( cal.get(Calendar.DAY_OF_YEAR));//----------------今天是一年的第几天
System.out.println( cal.get(Calendar.HOUR));//-----------------------现在是几点 12小时制
System.out.println( cal.get(Calendar.HOUR_OF_DAY));//----------------现在是几点 24小时制,一般使用这个属性赋值
System.out.println(cal.get(Calendar.MILLISECOND));//----------------现在的毫秒
System.out.println( cal.get(Calendar.MINUTE));//---------------------现在是几分
System.out.println( cal.get(Calendar.SECOND));//---------------------现在是几秒
System.out.println(cal.get(Calendar.WEEK_OF_MONTH));//--------------现在是一个月中的第几周
System.out.println(cal.get(Calendar.WEEK_OF_YEAR));//----------------现在是一个年中的第几周
System.out.println(cal.get(Calendar.MONTH));//-----------------------月份获取需要 +1,那么,赋值时需要 -1 System.out.println(cal.get(Calendar.MONTH)-1); //即可获得上个月的月份

(3)、与Date之间的转换

Calendar calendar = Calendar.getInstance();
// 从一个Calendar 对象中获取 Date 对象 Date date = calendar.getTime(); // 将 Date 对象反应到一个 Calendar 对象中,
// 先获得一个实例,然后设置 Date 对象
calendar.setTime(date); 月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。
calendar.set(Calendar.MONTH, 7); 计算2000-01-01是星期几 calendar.set(2000,1,1) calendar.get(calendar.DAY_OF_WEEK )

当然Calender是最早的时间处理,是jdk1.6的东西难免比较过时

二、Apache下的DateUtils

(1)、引入包

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>

(2)、没什么可说的上翻译就行

    /**
* 以秒为标准时间的毫秒数
*/
public static final long MILLIS_PER_SECOND = 1000
/**
*以分钟为标准时间的毫秒数
*/
public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND
/**
*以小时为标准时间的毫秒数
*/
public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE
/**
* 以天为标准时间的毫秒数
*/
public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR
/**
* 这个类型是半个月, 所以这可以代表日期是上还是下半个月 。
*/
public static final int SEMI_MONTH = 1001
/**
* 周范围, 从星期日开始 。
*/
public static final int RANGE_WEEK_SUNDAY = 1
/**
* 周范围,从星期一开始 。
*/
public static final int RANGE_WEEK_MONDAY = 2
/**
* 周范围,从关注的那天开始。
*/
public static final int RANGE_WEEK_RELATIVE = 3
/**
* 周范围,以关注的天为中心。
*/
public static final int RANGE_WEEK_CENTER = 4
/**
* 月范围,从星期日开始 。
*/
public static final int RANGE_MONTH_SUNDAY = 5
/**
* 月范围,从星期一开始 。
*/
public static final int RANGE_MONTH_MONDAY = 6
/**
* 不应在标准编成构造获取实列, 而应该直接使用类中的静态方法,如:DateUtils.parseDate(str) 。
* 此构造函数意在允许需要一个javabeen实列的工具中使用 。
*/
public DateUtils()
/**
* 判断两个日期时间是否是同一天 。
*
* @param date1 第一个日期,不可修改,非null
* @param date2 第二个日期,不可修改,非null
*/
public static boolean isSameDay(final Date date1, final Date date2)
/**
* 判断两个日历时间是否是同一天 。
*
* @param cal1 第一个日历,不可修改,非null
* @param cal2 第二个日历,不可修改,非null
*/
public static boolean isSameDay(final Calendar cal1, final Calendar cal2)
/**
* 判断两个日期是否相同
* 这种方法比较两个对象的毫秒时间
*
* @param date1 第一个日期,不可修改,非null
* @param date2 第二个日期,不可修改,非null
*/
public static boolean isSameInstant(final Date date1, final Date date2)
/**
* 判断两个日历是否相同
* 这种方法比较两个对象的毫秒时间
*
* @param cal1 第一个日历,不可修改,非null
* @param cal2 第二个日历,不可修改,非null
*/
public static boolean isSameInstant(final Calendar cal1, final Calendar cal2)
/**
* 判断两个日历本地时间是否相同
* 除了比较数值外两个日历对象的类型还要相同
*
* @param cal1 第一个日历,不可修改,非null
* @param cal2 第二个日历,不可修改,非null
*/
public static boolean isSameLocalTime(final Calendar cal1, final Calendar cal2)
/**
* 尝试用parsePatterns中各种不同的日期格式解析代表时间的字符串str 。
*
* 解析时会逐个使用parsePatterns中的格式,如果都没有匹配上, 则抛出异常ParseException 。
*
* @param str 被解析的时间字符串,非null
* @param parsePatterns 用于解析str的时间格式,有一个或几个,非null
*/
public static Date parseDate(final String str, final String... parsePatterns) throws ParseException
/**
* 尝试用parsePatterns中各种不同的日期格式解析代表时间的字符串str 。
* 解析时会使用给定的日期格式符locale 。
*
* 解析时会逐个使用parsePatterns中的格式,如果都没有匹配上, 则抛出异常ParseException 。
*
* @param str 被解析的时间字符串,非null
* @param locale 使用locale中的日期格式符,如果为null,则使用系统默认的locale
* @param parsePatterns 用于解析str的时间格式,有一个或几个,非null
*/
public static Date parseDate(final String str, final Locale locale, final String... parsePatterns) throws ParseException
/**
* 尝试用parsePatterns中各种不同的日期格式解析代表时间的字符串str 。
*
* 解析时会逐个使用parsePatterns中的格式,如果都没有匹配上, 则抛出异常ParseException 。
* 解析器解析严格不允许的日期, 如:"February 942, 1996" 。
*
* @param str 被解析的时间字符串,非null
* @param parsePatterns 用于解析str的时间格式,有一个或几个,非null
*/
public static Date parseDateStrictly(final String str, final String... parsePatterns) throws ParseException
/**
* 尝试用parsePatterns中各种不同的日期格式解析代表时间的字符串str 。
* 解析时会使用给定的日期格式符locale 。
*
* 解析时会逐个使用parsePatterns中的格式,如果都没有匹配上, 则抛出异常ParseException 。
* 解析器解析严格不允许的日期, 如:"February 942, 1996" 。
*
* @param str 被解析的时间字符串,非null
* @param locale 使用locale中的日期格式符,如果为null,则使用系统默认的locale
* @param parsePatterns 用于解析str的时间格式,有一个或几个,非null
*/
public static Date parseDateStrictly(final String str, final Locale locale, final String... parsePatterns) throws ParseException
/**
* 在日期date上增加amount年 。
*
* @param date 处理的日期,非null
* @param amount 要加的年数,可能为负数
*/
public static Date addYears(final Date date, final int amount)
/**
* 在日期date上增加amount月 。
*
* @param date 处理的日期,非null
* @param amount 要加的月数,可能为负数
*/
public static Date addMonths(final Date date, final int amount)
/**
* 在日期date上增加amount周 。
*
* @param date 处理的日期,非null
* @param amount 要加的周数,可能为负数
*/
public static Date addWeeks(final Date date, final int amount)
/**
* 在日期date上增加amount天 。
*
* @param date 处理的日期,非null
* @param amount 要加的天数,可能为负数
*/
public static Date addDays(final Date date, final int amount)
/**
* 在日期date上增加amount小时 。
*
* @param date 处理的日期,非null
* @param amount 要加的小时数,可能为负数
*/
public static Date addHours(final Date date, final int amount)
/**
* 在日期date上增加amount分钟 。
*
* @param date 处理的日期,非null
* @param amount 要加的分钟数,可能为负数
*/
public static Date addMinutes(final Date date, final int amount)
/**
* 在日期date上增加amount秒 。
*
* @param date 处理的日期,非null
* @param amount 要加的秒数,可能为负数
*/
public static Date addSeconds(final Date date, final int amount)
/**
* 在日期date上增加amount 毫秒 。
*
* @param date 处理的日期,非null
* @param amount 要加的毫秒数,可能为负数
*/
public static Date addMilliseconds(final Date date, final int amount)
/**
* 给日期data设置一个新的年份 。
*
* @param date 处理的日期,非null
* @param amount 要设置的年份
*/
public static Date setYears(final Date date, final int amount)
/**
* 给日期data设置一个新的月份 。
*
* @param date 处理的日期,非null
* @param amount 要设置的月份
*/
public static Date setMonths(final Date date, final int amount)
/**
* 给日期data设置一个新的天 。
*
* @param date 处理的日期,非null
* @param amount 要设置的天
*/
public static Date setDays(final Date date, final int amount)
/**
* 给日期data设置一个新的小时 。
*
* @param date 处理的日期,非null
* @param amount 要设置的小时
*/
public static Date setHours(final Date date, final int amount)
/**
* 给日期data设置一个新的分钟 。
*
* @param date 处理的日期,非null
* @param amount 要设置的分钟
*/
public static Date setMinutes(final Date date, final int amount)
/**
* 给日期data设置一个新的秒 。
*
* @param date 处理的日期,非null
* @param amount 要设置的秒
*/
public static Date setSeconds(final Date date, final int amount)
/**
* 给日期data设置一个新的毫秒 。
*
* @param date 处理的日期,非null
* @param amount 要设置的毫秒
*/
public static Date setMilliseconds(final Date date, final int amount)
/**
* 将一个日期放到日历中 。
*/
public static Calendar toCalendar(final Date date)
/**
* 根据阈值field四舍五入日历date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 14:00:00.000;
* 如果field为MONTH,它将返回 1 April 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Date round(final Date date, final int field)
/**
* 根据阈值field四舍五入日历date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 14:00:00.000;
* 如果field为MONTH,它将返回 1 April 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Calendar round(final Calendar date, final int field)
/**
* 根据阈值field四舍五入日历date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 14:00:00.000;
* 如果field为MONTH,它将返回 1 April 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Date round(final Object date, final int field)
/**
* 根据阈值field截取日期date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 13:00:00.000;
* 如果field为MONTH,它将返回 1 Mar 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Date truncate(final Date date, final int field)
/**
* 根据阈值field截取日历date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 13:00:00.000;
* 如果field为MONTH,它将返回 1 Mar 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Calendar truncate(final Calendar date, final int field)
/**
* 根据阈值field截取日期date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 13:00:00.000;
* 如果field为MONTH,它将返回 1 Mar 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Date truncate(final Object date, final int field)
/**
* 根据阈值field向上舍入日期date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 14:00:00.000;
* 如果field为MONTH,它将返回 1 Apr 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Date ceiling(final Date date, final int field)
/**
* 根据阈值field向上舍入日期date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 14:00:00.000;
* 如果field为MONTH,它将返回 1 Apr 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Calendar ceiling(final Calendar date, final int field)
/**
* 根据阈值field向上舍入日期date 。
*
* 例如, 如果你的时间是 28 Mar 2002 13:45:01.231,
* 如果field为HOUR,它将返回 28 Mar 2002 14:00:00.000;
* 如果field为MONTH,它将返回 1 Apr 2002 0:00:00.000 。
*
* @param date 处理的日期,非null
* @param field 阈值
*/
public static Date ceiling(final Object date, final int field)
/**
* 根据指定的时间focus和范围类型rangeStyle构建一个时间范围迭代器 。
*
* 如传入的时间是Thursday, July 4, 2002,范围类型是RANGE_MONTH_SUNDAY,
* 则返回迭代器的范围是从Sunday, June 30, 2002 到 Saturday, August 3, 2002
*
* @param focus 指定的时间
* @param rangeStyle 范围类型,值必须是如下之一:
* DateUtils.RANGE_MONTH_SUNDAY,
* DateUtils.RANGE_MONTH_MONDAY,
* DateUtils.RANGE_WEEK_SUNDAY,
* DateUtils.RANGE_WEEK_MONDAY,
* DateUtils.RANGE_WEEK_RELATIVE,
* DateUtils.RANGE_WEEK_CENTER
*/
public static Iterator<Calendar> iterator(final Date focus, final int rangeStyle)
/**
* 根据指定的时间focus和范围类型rangeStyle构建一个时间范围迭代器 。
*
* 如传入的时间是Thursday, July 4, 2002,范围类型是RANGE_MONTH_SUNDAY,
* 则返回迭代器的范围是从Sunday, June 30, 2002 到 Saturday, August 3, 2002
*
* @param focus 指定的时间
* @param rangeStyle 范围类型,值必须是如下之一:
* DateUtils.RANGE_MONTH_SUNDAY,
* DateUtils.RANGE_MONTH_MONDAY,
* DateUtils.RANGE_WEEK_SUNDAY,
* DateUtils.RANGE_WEEK_MONDAY,
* DateUtils.RANGE_WEEK_RELATIVE,
* DateUtils.RANGE_WEEK_CENTER
*/
public static Iterator<Calendar> iterator(final Calendar focus, final int rangeStyle)
/**
* 根据指定的时间focus和范围类型rangeStyle构建一个时间范围迭代器 。
*
* 如传入的时间是Thursday, July 4, 2002,范围类型是RANGE_MONTH_SUNDAY,
* 则返回迭代器的范围是从Sunday, June 30, 2002 到 Saturday, August 3, 2002
*
* @param focus 指定的时间
* @param rangeStyle 范围类型,值必须是iterator(Calendar, int)方法注释中列出的
*/
public static Iterator<?> iterator(final Object focus, final int rangeStyle) /**
* 返回指定分段内的毫秒数 。 所有大于分段的DateFields将被忽略 。
*
* 请求任何日期毫秒,将返回当前秒的毫秒数 (返回一个数字在0和999之间) 。
* 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND 和 Calendar.MILLISECOND
* 分段值小于或等于MILLISECOND,将返回0 。
*
* January 1, 2008 7:15:10.538 with Calendar.SECOND as fragment will return 538
* January 6, 2008 7:15:10.538 with Calendar.SECOND as fragment will return 538
* January 6, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10538
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
* (a millisecond cannot be split in milliseconds)
*
* @param calendar 获取值得日历对象,非null
* @param fragment 分段值
*/
public static long getFragmentInMilliseconds(final Calendar calendar, final int fragment)
/**
* 返回指定分段内的秒数 。 所有大于分段的DateFields将被忽略 。
*
* 请求任何日期秒,将返回当前的分钟的秒数 (返回一个数字在0和59之间) 。
* 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND 和 Calendar.MILLISECOND
* 分段值小于或等于SECOND,将返回0 。
*
* January 1, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10
* January 6, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10
* January 6, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 26110
* (7*3600 + 15*60 + 10)</li>
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar 获取值得日历对象,非null
* @param fragment 分段值
*/
public static long getFragmentInSeconds(final Calendar calendar, final int fragment)
/**
* 返回指定分段内的分钟数 。 所有大于分段的DateFields将被忽略 。
*
* 请求任何日期分钟,将返回当前的小时的分钟数 (返回一个数字在0和59之间)
* 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND 和 Calendar.MILLISECOND
* 分段值小于或等于MINUTE,将返回0 。
*
* January 1, 2008 7:15:10.538 with Calendar.HOUR_OF_DAY as fragment will return 15
* January 6, 2008 7:15:10.538 with Calendar.HOUR_OF_DAY as fragment will return 15
* January 1, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 15
* January 6, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 435 (7*60 + 15)
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar 获取值得日历对象,非null
* @param fragment 分段值
*/
public static long getFragmentInMinutes(final Calendar calendar, final int fragment)
/**
* 返回指定分段内的小时数 。 所有大于分段的DateFields将被忽略 。
*
* 请求任何日期小时,将返回当前的天的小时数 (返回一个数字在0和23之间) 。
* 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND 和 Calendar.MILLISECOND
* 分段值小于或等于HOUR_OF_DAY,将返回0 。
*
* January 1, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 7
* January 6, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 7
* January 1, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 7
* January 6, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 127 (5*24 + 7)
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar 获取值得日历对象,非null
* @param fragment 分段值
*/
public static long getFragmentInHours(final Calendar calendar, final int fragment)
/**
* 返回指定分段内的天数 。 所有大于分段的DateFields将被忽略 。
*
* 请求任何日期天数,将返回当前的月的天数 (返回一个数字在1和31之间) 。
* 有效的分段值是: Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND 和 Calendar.MILLISECOND
* 分段值小于或等于DATE,将返回0 。
*
* January 28, 2008 with Calendar.MONTH as fragment will return 28
* February 28, 2008 with Calendar.MONTH as fragment will return 28
* January 28, 2008 with Calendar.YEAR as fragment will return 28
* February 28, 2008 with Calendar.YEAR as fragment will return 59
* January 28, 2008 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar 获取值得日历对象,非null
* @param fragment 分段值
*/
public static long getFragmentInDays(final Calendar calendar, final int fragment)
/**
* 截取比较两个日历对象的field处的值是否相同 。
*
* @param cal1 第一个日历对象,非null
* @param cal2 第二个日历对象,非null
* @param field Calendar中的阈值
*/
public static boolean truncatedEquals(final Calendar cal1, final Calendar cal2, final int field)
/**
* 截取比较两个日期对象的field处的值是否相同 。
*
* @param date1 第一个日期对象,非null
* @param date2 第二个日期对象,非null
* @param field Calendar中的阈值
*/
public static boolean truncatedEquals(final Date date1, final Date date2, final int field)
/**
* 截取比较两个日历对象的field处的值 。
* 如果第一个日历小于、等于、大于第二个,则对应返回负整数、0、正整数
*
* @param cal1 第一个日历对象,非null
* @param cal2 第二个日历对象,非null
* @param field Calendar中的阈值
*/
public static int truncatedCompareTo(final Calendar cal1, final Calendar cal2, final int field)
/**
* 截取比较断两个日期对象的field处的值 。
* 如果第一个日期小于、等于、大于第二个,则对应返回负整数、0、正整数
*
* @param date1 第一个日期对象,非null
* @param date2 第二个日期对象,非null
* @param field Calendar中的阈值
*/
public static int truncatedCompareTo(final Date date1, final Date date2, final int field) //简单举例
System.out.println(DateUtils.addDays(new Date(), 1));//-----------------当前日期。天数加1如果想建议填负数即可
System.out.println(DateUtils.addHours(new Date(), 0));//----------------当前日期
Date date = DateUtils.addDays(new Date(), 1);

DateUtils返回的就是Date不需要转换,当然也是很早的东西了,只是诞生在Calender基础之上而已

三、JDK1.8新增的日期API LocalDate | LocalTime | LocalDateTime

新的日期API都是不可变的,更使用于多线程的使用环境中(从默认时区的系统时钟获取当前的日期时间。不用考虑时区差)

优点:

1、之前使用的java.util.Date月份从0开始,我们一般会+1使用,很不方便,java.time.LocalDate月份和星期都改成了enum

2、java.util.Date和SimpleDateFormat都不是线程安全的,而LocalDate和LocalTime和最基本的String一样,是不变类型,不但线程安全,而且不能修改。

3、java.util.Date是一个“万能接口”,它包含日期、时间,还有毫秒数,更加明确需求取舍

4、新接口更好用的原因是考虑到了日期时间的操作,经常发生往前推或往后推几天的情况。用java.util.Date配合Calendar要写好多代码,而且一般的开发人员还不一定能写对。

(1)、LocalDateTime(年月日时分秒)

LocalDateTime date = LocalDateTime.now();
//2021-03-26T10:24:14.009784900
System.out.println(date); //获取年月日时分秒操作
System.out.println(date.getYear());
System.out.println(date.getMonthValue());
System.out.println(date.getDayOfMonth());
System.out.println(date.getHour());
System.out.println(date.getMinute());
System.out.println(date.getSecond());
System.out.println(date.getNano()); //当然你也可以获取最近任意的一段时间
System.out.println(date.getSecond()+1); || System.out.println(date.getSecond()-1); // 手动创建一个LocalDateTime实例
LocalDateTime date2 = LocalDateTime.of(2017, 12, 17, 9, 31, 31, 31);
System.out.println(date2);
// 进行加操作,得到新的日期实例
LocalDateTime date3 = date2.plusDays(12);
System.out.println(date3);
// 进行减操作,得到新的日期实例
LocalDateTime date4 = date3.minusYears(2);
System.out.println(date4); isAfter()判断一个日期是否在指定日期之后 返回boolean 类型
System.out.println(localDateTime.isBefore(LocalDateTime.now()));//---------返回false isBefore()判断一个日期是否在指定日期之前 返回boolean 类型
System.out.println(localDateTime.isAfter(LocalDateTime.now()));//---------返回false isLeapYear()判断是否是闰年(这个是LocalDate类中的方法) 返回boolean类型
System.out.println(localDateTime.isEqual(LocalDateTime.now()));//---------返回true

(2)、LocalDateTime与Date之间的转换

Date to LocalDateTime

Date todayDate = new Date();

LocalDateTime ldt = Instant.ofEpochMilli( todayDate.getTime() )
.atZone( ZoneId.systemDefault() )
.toLocalDateTime(); System.out.println(ldt);

LocalDateTime to Date

LocalDateTime localDateTime = LocalDateTime.now();

Date date = Date.from( localDateTime.atZone( ZoneId.systemDefault()).toInstant());

System.out.println(date);

当然还有很多好玩的东西,LocalDate(年月日) LocalTime(时分秒)和LocalDateTime(年月日时分秒)都大差不差,所以讲一个即可

四、Hutool(Java工具类库)

一个比较好玩的Java工具类库,包含很多好玩的工具类,简单便捷。

(1)、安装

Maven

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.1</version>
</dependency>

Gradle

compile 'cn.hutool:hutool-all:5.6.1'

Maven中央仓库

Hutool 5.x支持JDK8+,对Android平台没有测试,不能保证所有工具类或工具方法可用。 如果你的项目使用JDK7,请使用Hutool 4.x版本

(2)、使用

	//该工具类时间都是格式化好的
System.out.println(DateUtil.now());//------------------------------取当前时间 这也没啥好说的下载源码看中文注释即可,就不一一举例了,,,简简单单。

总结

总之好玩的工具类一大坨,不管是jdk原生还是别人封装的工具类,如果你想也可以自己通过jdk1.8的日期api自己封装属于自己的日期工具类,网上的日期工具类太多了,不要重复造轮子~~~~~~~~~~今天也是元气满满的一天

Java 进行时间处理的更多相关文章

  1. Java实现时间动态显示方法汇总

    这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下 本文所述实例可以实现Java在界面上动态的显示时间.具体实现方法汇总如下: 1.方法一 用TimerTask: ...

  2. Java 对时间和日期的相关处理

    1. 获取当前系统时间和日期并格式化输出 import java.util.Date; import java.text.SimpleDateFormat; public class NowStrin ...

  3. java中时间的获取(二)

    java中时间的获取2 /** * 获取数据库操作记录时间 */ public static String getOpreateDbTime() { Calendar c = Calendar.get ...

  4. Java 日期时间

    Java 日期时间 标签 : Java基础 Date java.util.Date对象表示一个精确到毫秒的瞬间; 但由于Date从JDK1.0起就开始存在了,历史悠久,而且功能强大(既包含日期,也包含 ...

  5. JAVA格式化时间日期

    JAVA格式化时间日期 import java.util.Date; import java.text.DateFormat; /** * 格式化时间类 * DateFormat.FULL = 0 * ...

  6. Java日期时间使用(转)

    Java日期时间使用总结 转自:http://lavasoft.blog.51cto.com/62575/52975/   一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个 ...

  7. Java格式化时间

    Java格式化时间 将秒或者毫秒值格式化成指定格式的时间 效果图 工具类 工具类里我只列出了一种格式的格式化方式,可以根据自己的需求,修改"yyyy-MM-dd hh:mm:ss" ...

  8. java Date时间的各种转换方式和Mysql存时间类型字段的分析

    一:各种Date之间的转换方法 public class TimeTest { public static void main(String[] args) { Date date = new Dat ...

  9. Java日期时间处理

    Java 日期时间处理 一.时间相关类 java.lang.System java.util.Date java.util.Calendar java.util.GregorianCalendar j ...

  10. Java日期时间,以及相互转换

    Java日期时间,以及相互转化 package com.study.string; import java.text.ParseException; import java.text.SimpleDa ...

随机推荐

  1. Codeforces Round #546 C. Nastya Is Transposing Matrices

    题面: 传送门 题目描述: 给出两个n x m的矩阵A,B.矩阵A可以把正方子矩阵进行"转置操作",问:可不可以对矩阵A进行多次这样的操作,使矩阵A变为矩阵B?   题目分析: 这 ...

  2. java IO NIO BIO 最权威的总结

    1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 1.4 总结 2. NIO (New I/O) 2.1 NIO 简介 2.2 NIO的特性/N ...

  3. IPFS是什么?IPFS与Filecoin有什么关系?

    Filecoin 基于 IPFS 的去中心化存储网络,是 IPFS 上唯一的激励层,是一个基于区块链技术发行的通证.Filecoin 翻译过来就是文件币,简称为 FIL. 在 FIlecoin 网络中 ...

  4. 攻防世界 reverse 666

    666  2019_UNCTF main int __cdecl main(int argc, const char **argv, const char **envp) { char myen; / ...

  5. 2019_西湖论剑_预选赛 testre

    2019_西湖论剑_预选赛 testre 程序中关键操作是比较ptr,其中夹杂的一部分v26计算是为了混淆我们的分析.那么我们只要跟踪ptr数组的生成便可,向上发现v11,加密操作数组. 接下来跟踪v ...

  6. Git代码版本控制流程

    我们的项目使用Git作为代码仓库.和版本控制工具. Git有几种Workflow,来管理代码版本变更流程,我们采用Gitflow Workflow流程. Gitflow Workflow,采用了mas ...

  7. JAVA题目:小芳的妈妈每天给她2.5元,她都会存起来,但是,每当这一天是存钱的第五题或者5的倍数的话,她都会去用掉6块钱。 问:至少经过多少天可以存到100块?

    1 /*题目:小芳的妈妈每天给她2.5元,她都会存起来, 2 但是,每当这一天是存钱的第五题或者5的倍数的话, 3 她都会去用掉6块钱. 4 问:至少经过多少天可以存到100块? 5 */ 6 /*分 ...

  8. WebGPU[4] 纹理三角形

    代码见:https://github.com/onsummer/my-dev-notes/tree/master/webgpu-Notes/04-texture-triangle 原创,发布日 202 ...

  9. PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...

  10. A. 【例题1】奶牛晒衣服

    A . [ 例 题 1 ] 奶 牛 晒 衣 服 A. [例题1]奶牛晒衣服 A.[例题1]奶牛晒衣服 关于很水的题解 既然是最少时间,那么就是由最湿的衣服来决定的.那么考虑烘干机对最湿的衣服进行操作 ...