文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 进行时间处理的步骤

2024-04-02 19:55

关注

一、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
     
    public DateUtils()
    
    public static boolean isSameDay(final Date date1, final Date date2)
    
    public static boolean isSameDay(final Calendar cal1, final Calendar cal2)
    
    public static boolean isSameInstant(final Date date1, final Date date2)
    
    public static boolean isSameInstant(final Calendar cal1, final Calendar cal2)
    
    public static boolean isSameLocalTime(final Calendar cal1, final Calendar cal2)
    
    public static Date parseDate(final String str, final String... parsePatterns) throws ParseException
    
    public static Date parseDate(final String str, final Locale locale, final String... parsePatterns) throws ParseException
    
    public static Date parseDateStrictly(final String str, final String... parsePatterns) throws ParseException
    
    public static Date parseDateStrictly(final String str, final Locale locale, final String... parsePatterns) throws ParseException
    
    public static Date addYears(final Date date, final int amount)
    
    public static Date addMonths(final Date date, final int amount)
    
    public static Date addWeeks(final Date date, final int amount)
    
    public static Date addDays(final Date date, final int amount)
    
    public static Date addHours(final Date date, final int amount)
    
    public static Date addMinutes(final Date date, final int amount)
    
    public static Date addSeconds(final Date date, final int amount)
    
    public static Date addMilliseconds(final Date date, final int amount)
     
    public static Date setYears(final Date date, final int amount)
     
    public static Date setMonths(final Date date, final int amount)
    
    public static Date setDays(final Date date, final int amount)
    
    public static Date setHours(final Date date, final int amount)
     
    public static Date setMinutes(final Date date, final int amount)
    
    public static Date setSeconds(final Date date, final int amount)
    
    public static Date setMilliseconds(final Date date, final int amount)
    
    public static Calendar toCalendar(final Date date)
    
    public static Date round(final Date date, final int field)
    
    public static Calendar round(final Calendar date, final int field)
    
    public static Date round(final Object date, final int field)
    
    public static Date truncate(final Date date, final int field)
     
    public static Calendar truncate(final Calendar date, final int field)
    
    public static Date truncate(final Object date, final int field)
    
    public static Date ceiling(final Date date, final int field)
    
    public static Calendar ceiling(final Calendar date, final int field)
    
    public static Date ceiling(final Object date, final int field)
    
    public static Iterator<Calendar> iterator(final Date focus, final int rangeStyle)
    
    public static Iterator<Calendar> iterator(final Calendar focus, final int rangeStyle)
    
    public static Iterator<?> iterator(final Object focus, final int rangeStyle)
 

  public static long getFragmentInMilliseconds(final Calendar calendar, final int fragment)
    
    public static long getFragmentInSeconds(final Calendar calendar, final int fragment)
    
    public static long getFragmentInMinutes(final Calendar calendar, final int fragment)
    
    public static long getFragmentInHours(final Calendar calendar, final int fragment)
    
    public static long getFragmentInDays(final Calendar calendar, final int fragment)
    
    public static boolean truncatedEquals(final Calendar cal1, final Calendar cal2, final int field)
    
    public static boolean truncatedEquals(final Date date1, final Date date2, final int field)
    
    public static int truncatedCompareTo(final Calendar cal1, final Calendar cal2, final int field)
    
    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 进行时间处理的步骤的详细内容,更多关于Java 时间处理的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯