java时间类

本文深入探讨了Java中日期和时间处理的API,包括传统的java.util.Calendar和TimeZone,以及JDK 1.8引入的现代API如LocalDate、LocalTime、LocalDateTime、Duration和Period。讲解了如何进行日期时间的格式化、解析、比较和运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

calendar

包路径:java.util包下

        /**
         * TimeZone:
         * 表示时区偏移量,如 中国/重庆(Asia/Chongqing) 等等。
         * 注:GMT+08:00 为中国所在时区(东八区)
         */
        // 如果输入不存在的,默认以GMT(格林尼治标准时间,世界标准时间)
        TimeZone.getTimeZone("GMT").getDisplayName();
        // 中国标准时间
        TimeZone.getTimeZone("Asia/Chongqing").getDisplayName();
        // 香港时间
        TimeZone.getTimeZone("Asia/Hong_Kong").getDisplayName();
        /**
         * Locale:
         * 表示语言环境,如 中国China、SIMPLIFIED_CHINESE(简体中文),  加拿大(Canada),美国(US),英国(UK)。
         */
        // 构造参数意思: zh: 语言, CN: 国家
        Locale zh = new Locale("zh", "CN");
        /**
         * Calendar: 线程不安全 默认以(周日 1)为一周的起始
         * 常量:
         * Calendar.YEAR: 表示年   Calendar.MONTH: 表示月     Calendar.DATE: 表示当月中的天数
         * Calendar.DAY_OF_WEEK_IN_MONTH: 表示当月中的第几周   Calendar.DAY_OF_WEEK: 表示周中的第几天
         *
         *
         */
        Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), zh);
        Calendar calendar1 = Calendar.getInstance();
        // 2019-04-16 12:00:15
        calendar1.set(2019, Calendar.MAY, 16, 12, 0, 15);
        // 当前时间
        Date time = calendar.getTime();
        // 设置一周的起始为周一
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        // 获取一周的起始 周日(1) 周一(2)
        int firstDayOfWeek = calendar.getFirstDayOfWeek();
        // calendar1在calendar之前返回true
        boolean before = calendar.before(calendar1);
        // calendar1在calendar之后返回true
        boolean after = calendar.after(calendar1);
        // 当前时间加1天
        calendar.add(Calendar.DATE, 1);
        

LocalDate: JDK.1.8 新增

包路径: java.time

		/**
         * ZoneId:
         * 表示时区, 如: 亚洲/重庆(Asia/Chongqing), 亚洲/上海(Asia/Shanghai)
         */
        ZoneId of = ZoneId.of("Asia/Shanghai");
        /**
         * Clock:
         * 该类提供了访问当前日期和时间的方法,Clock是时区敏感的,
         * 可以用来取代 System.currentTimeMillis() 来获取当前的毫秒数
         */
        Clock clock = Clock.systemDefaultZone();
        // 毫秒数
        long millis = clock.millis();
        /**
         * DateTimeFormatter: 时间格式化常量
         * DateTimeFormatter.ofPattern("yyyy-MM-dd") 自定义格式化
         * y: 年
         * M: 5     MM: 05     MMM:Jul      MMMM:July
         * D: 一年中的第几天
         * d: 3     dd: 03
         * Q/q: 每年的季度
         * a: 上午/下午(注:只有LocalDateTime和LocalTime可以获得)
         */
        /**
         * 注: LocalDate、LocalDateTime等所有类都实现了Temporal接口
         * Duration、Period、ChronoPeriodImpl等类都实现了TemporalAmount接口
         */
        /**
         * ChronoUnit:  该枚举类实现了TemporalUnit接口, 用于日期的单位
         * 时间单位枚举类,计算日期相隔天数等   可以获取所有时间类型的差
         * 注: 扩展ChronoField(实现了TemporalField接口,用于时间的单位)
         */
        LocalDate now = LocalDate.now();
        // 开始-结束  相差多少天(如果参数1(开始时间)大参数2(结束时间)之后,那么返回值为负数)
        long between = ChronoUnit.DAYS.between(LocalDate.parse("2019-04-11"), now);
        System.out.println(between);
        /**
         * Period: 只适用于包含年月日的LocalDate等
         * 开始-结束  年月日相差。
         * Period 类表示一段时间的年、月、日,开使用between()方法获取两个日期之间的差作为Period 对象返回
         */
        LocalDate birthday = LocalDate.parse("1995-05-19");
        Period period = Period.between(birthday, now);
        String.format("相差:%1$d年-%2$d月-%3$d日", period.getYears(), period.getMonths(), period.getDays());
        /**
         * Duration(秒、纳秒): 只适用于包含时间的LocalDateTime、DateTime等
         * 开始-结束  时间差。(如果参数1在参数2之前,返回正数,否则返回负数)
         */
        Duration duration = Duration.between(LocalTime.of(17,21 , 0), LocalTime.now());
        String.format("相差:%1$d秒", duration.getSeconds());
        /**
         * LocalDate:
         * 表示一个具体的日期,但不包含具体时间,也不包含时区信息。 parse()默认以yyyy-MM-dd解析
         */
        // 增加1天
        LocalDate plus = now.plus(1, ChronoUnit.DAYS);
        // 减1天
        now.minus(1, ChronoUnit.DAYS);
        // 是否为闰年(true)
        boolean leapYear = now.isLeapYear();
        // 当前月总天数
        int i = now.lengthOfMonth();
        /**
         * DayOfWeek:
         * 周常量类, MONDAY(周一) TUESDAY(周二) WEDNESDAY(周三) THURSDAY(周四) FRIDAY(周五) SATURDAY(周六) SUNDAY(周日)
         */
        // 本周周几
        DayOfWeek dayOfWeek = now.getDayOfWeek();
        /**
         * LocalTime:
         * 表示一个具体的时间,但不包含日期。
         */
        LocalTime time = LocalTime.of(12, 1, 15);
        /**
         * ChronoField:
         * 时间单位枚举。
         */
        // 支持指定类型枚举(true): 枚举(表示相对于分的秒数)
        boolean supported = time.isSupported(ChronoField.SECOND_OF_MINUTE);
        // 相对于天过去了多少秒
        time.getLong(ChronoField.SECOND_OF_DAY);
        // 相对于分过去了多少秒
        time.getLong(ChronoField.SECOND_OF_MINUTE);
        // 调整参数对象的时间与调用方相同.(也就是把time的时间赋给参数)
        Temporal temporal = time.adjustInto(LocalDateTime.now());
        /**
         * TemporalAdjusters:
         * 提供日期获取的静态工具类。 如: 找到本月第一天, 找到下个月的第一天等等。
         */
        // 获取指定月的第一天
        Temporal temporal1 = TemporalAdjusters.firstDayOfMonth().adjustInto(now);
        // 推荐使用这种
        LocalDate monthOfFirstDay = now.with(TemporalAdjusters.firstDayOfMonth());
        // 增加一小时
        LocalTime plus1 = time.plus(Duration.ofHours(1));
        /**
         * LocalDateTime:
         * 就是LocalDate与LocalTime的结合
         */


基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值