当前位置: 首页 > news >正文

JDK8新特性里提供了3个时间类:LocalDate、LocalTime、LocalDateTime

参考资料:好好学Java https://mp.weixin.qq.com/s/Dd_7yUh3lq3TqE2cjsYXvw

JDK8新特性里提供了3个时间类:LocalDate、LocalTime、LocalDateTime

在项目开发中,已经需要对Date类型进行格式,否则可读性很差,格式化Date类型要使用SimpleDateFormat,但SimpleDateFormat是现成不安全的。

  1. 为什么需要LocalDate、LocalTime、LocalDateTime

1.1 Date如果不格式化,打印出的日期可读性差

Tue Sep 10 09:34:04 CST 2019
1.2 使用SimpleDateFormat对时间进行格式化,但SimpleDateFormat是线程不安全的。SimpleDateFormat的format方法最终调用代码:

复制代码
private StringBuffer format(Date date, StringBuffer toAppendTo, FieldDelegate delegate) {
// Convert input date to time field list
calendar.setTime(date);
boolean useDateFormatSymbols = useDateFormatSymbols();
for (int i = 0; i < compiledPattern.length; ) {
int tag = compiledPattern[i] >>> 8;
int count = compiledPattern[i++] & 0xff;
if (count == 255) {
count = compiledPattern[i++] << 16;
count |= compiledPattern[i++];
}
switch (tag) {
case TAG_QUOTE_ASCII_CHAR:
toAppendTo.append((char) count);
break;
case TAG_QUOTE_CHARS:
toAppendTo.append(compiledPattern, i, count);
i += count;
break;
default:
subFormat(tag, count, delegate, toAppendTo, useDateFormatSymbols);
break;
}
}
return toAppendTo;
}
复制代码
  calendar是共享变量,并且这个共享变量没有做线程安全控制。当多个线程同时使用相同的SimpleDateFormat对象【如用static修饰的SimpleDateFormat】调用format方法时,多个线程会同时调用calendar.setTime方法,可能一个线程刚设置好time值 另外的一个线程马上把设置的time值给修改了导致返回的格式化时间可能是错误的。

在多并发情况下使用SimpleDateFormat需格外注意 SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。parse方法实际调用alb.establish(calendar).getTime()方法来解析,alb.establish(calendar)方法里主要完成了

a、重置日期对象cal的属性值

b、使用calb中中属性设置cal

c、返回设置好的cal对象

但是这三步不是原子操作。

多线程并发如何保证线程安全 - 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat对象 => 创建和销毁对象的开销大 - 对使用format和parse方法的地方进行加锁 => 线程阻塞性能差 - 使用ThreadLocal保证每个线程最多只创建一次SimpleDateFormat对象 => 较好的方法。Date对时间处理比较麻烦,比如想获取某年、某月、某星期,以及n天以后的时间,如果用Date来处理的话真是太难了,你可能会说Date类不是有getYear、getMonth这些方法吗,获取年月日很Easy,但都被弃用了。

  1. Java8全新的日期和时间API

2.1 LocalDate

LocalDate是日期处理类,具体API如下:

复制代码
// 获取当前日期
LocalDate now = LocalDate.now();
// 设置日期
LocalDate localDate = LocalDate.of(2019, 9, 10);
// 获取年
int year = localDate.getYear(); //结果:2019
int year1 = localDate.get(ChronoField.YEAR); //结果:2019
// 获取月
Month month = localDate.getMonth(); // 结果:SEPTEMBER
int month1 = localDate.get(ChronoField.MONTH_OF_YEAR); //结果:9
// 获取日
int day = localDate.getDayOfMonth(); //结果:10
int day1 = localDate.get(ChronoField.DAY_OF_MONTH); // 结果:10
// 获取星期
DayOfWeek dayOfWeek = localDate.getDayOfWeek(); //结果:TUESDAY
int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK); //结果:2
复制代码

2.2 LocalTime

LocalTime是时间处理类,具体API如下:

复制代码
// 获取当前时间
LocalTime now = LocalTime.now();
// 设置时间
LocalTime localTime = LocalTime.of(13, 51, 10);
//获取小时
int hour = localTime.getHour(); // 结果:13
int hour1 = localTime.get(ChronoField.HOUR_OF_DAY); // 结果:13
//获取分
int minute = localTime.getMinute(); // 结果:51
int minute1 = localTime.get(ChronoField.MINUTE_OF_HOUR); // 结果:51
//获取秒
int second = localTime.getSecond(); // 结果:10
int second1 = localTime.get(ChronoField.SECOND_OF_MINUTE); // 结果:10
复制代码

2.3 LocalDateTime

LocalDateTime可以设置年月日时分秒,相当于LocalDate + LocalTime

复制代码
// 获取当前日期时间
LocalDateTime localDateTime = LocalDateTime.now();
// 设置日期
LocalDateTime localDateTime1 = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
LocalDateTime localDateTime2 = LocalDateTime.of(localDate, localTime);
LocalDateTime localDateTime3 = localDate.atTime(localTime);
LocalDateTime localDateTime4 = localTime.atDate(localDate);
// 获取LocalDate
LocalDate localDate2 = localDateTime.toLocalDate();
// 获取LocalTime
LocalTime localTime2 = localDateTime.toLocalTime();
复制代码

2.4 Instant

// 创建Instant对象
Instant instant = Instant.now();
// 获取秒
long currentSecond = instant.getEpochSecond();
// 获取毫秒
long currentMilli = instant.toEpochMilli();
  如果只是为了获取秒数或者毫秒数,使用System.currentTimeMillis()来得更为方便

2.5 修改LocalDate、LocalTime、LocalDateTime、Instant

LocalDate、LocalTime、LocalDateTime、Instant为不可变对象,修改这些对象对象会返回一个副本。增加、减少年数、月数、天数等 以LocalDateTime为例。

复制代码
// 创建日期:2019-09-10 14:46:56
LocalDateTime localDateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
//增加一年
localDateTime = localDateTime.plusYears(1); //结果: 2020-09-10 14:46:56
localDateTime = localDateTime.plus(1, ChronoUnit.YEARS); //结果: 2021-09-10 14:46:56
//减少一个月
localDateTime = localDateTime.minusMonths(1); //结果: 2021-08-10 14:46:56
localDateTime = localDateTime.minus(1, ChronoUnit.MONTHS); //结果: 2021-07-10 14:46:56
复制代码
  通过with修改某些值,年月日时分秒都可以通过with方法设置。

//修改年为2019
localDateTime = localDateTime.withYear(2020);
//修改为2022
localDateTime = localDateTime.with(ChronoField.YEAR, 2022);
  日期计算。比如有些时候想知道这个月的最后一天是几号、下个周末是几号,通过提供的时间和日期API可以很快得到答案 。TemporalAdjusters提供的各种日期时间格式化的静态类,比如firstDayOfYear是当前日期所属年的第一天

LocalDate localDate = LocalDate.now();
LocalDate localDate1 = localDate.with(TemporalAdjusters.firstDayOfYear());
  格式化时间。DateTimeFormatter默认提供了多种格式化方式,如果默认提供的不能满足要求,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式

LocalDate localDate = LocalDate.of(2019, 9, 10);
String s1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
String s2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
//自定义格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(“dd/MM/yyyy”);
String s3 = localDate.format(dateTimeFormatter);
  解析时间。和SimpleDateFormat相比,DateTimeFormatter是线程安全的

LocalDate localDate1 = LocalDate.parse(“20190910”, DateTimeFormatter.BASIC_ISO_DATE);
LocalDate localDate2 = LocalDate.parse(“2019-09-10”, DateTimeFormatter.ISO_LOCAL_DATE);
  Date与LocalDateTime转换。

复制代码
/**

  • LocalDateTime转毫秒时间戳
  • @param localDateTime LocalDateTime
  • @return 时间戳
    */
    public static Long localDateTimeToTimestamp(LocalDateTime localDateTime) {
    try {
    ZoneId zoneId = ZoneId.systemDefault();
    Instant instant = localDateTime.atZone(zoneId).toInstant();
    return instant.toEpochMilli();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }

/**

  • 时间戳转LocalDateTime
  • @param timestamp 时间戳
  • @return LocalDateTime
    */
    public static LocalDateTime timestampToLocalDateTime(long timestamp) {
    try {
    Instant instant = Instant.ofEpochMilli(timestamp);
    ZoneId zone = ZoneId.systemDefault();
    return LocalDateTime.ofInstant(instant, zone);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }

/**

  • Date转LocalDateTime
  • @param date Date
  • @return LocalDateTime
    */
    public static LocalDateTime dateToLocalDateTime(Date date) {
    try {
    Instant instant = date.toInstant();
    ZoneId zoneId = ZoneId.systemDefault();
    return instant.atZone(zoneId).toLocalDateTime();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }

/**

  • LocalDateTime转Date
  • @param localDateTime LocalDateTime
  • @return Date
    */
    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
    try {
    ZoneId zoneId = ZoneId.systemDefault();
    ZonedDateTime zdt = localDateTime.atZone(zoneId);
    return Date.from(zdt.toInstant());
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }
    复制代码
      SpringBoot中应用LocalDateTime

将LocalDateTime字段以时间戳的方式返回给前端 添加日期转化类

public class LocalDateTimeConverter extends JsonSerializer<LocalDateTime> {@Overridepublic void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {gen.writeNumber(value.toInstant(ZoneOffset.of("+8")).toEpochMilli());}
}

并在LocalDateTime字段上添加@JsonSerialize(using = LocalDateTimeConverter.class)注解,如下:

@JsonSerialize(using = LocalDateTimeConverter.class)
protected LocalDateTime gmtModified;
  将LocalDateTime字段以指定格式化日期的方式返回给前端 在LocalDateTime字段上添加@JsonFormat(shape=JsonFormat.Shape.STRING, pattern=“yyyy-MM-dd HH:mm:ss”)注解即可,如下:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern=“yyyy-MM-dd HH:mm:ss”)
protected LocalDateTime gmtModified;
  对前端传入的日期进行格式化 在LocalDateTime字段上添加@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解即可,如下:

@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
protected LocalDateTime gmtModified;
  总结:

LocalDateTime:Date有的我都有,Date没有的我也有,

参考链接:https://www.cnblogs.com/huanshilang/p/12013386.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-2968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

c++:mt19937生成随机数

随机生成&#xff1a; int rd(){mt19937 rd1(time(NULL));return rd1(); }指定随机数的生成范围&#xff1a; int rd(){mt19937 rd1(time(NULL));uniform_int_distribution<int>t(0,100000);//指定范围return t(rd1); }...

微服务 分布式配置中心Apollo

微服务 分布式配置中心Apollo概览什么是配置什么是配置中心Apollo简介Apollo入门案例Apollo应用Apollo应用于分布式系统概览 什么是配置 先考虑几个问题 什么是配置&#xff0c;为什么需要配置&#xff0c;配置有哪些特点&#xff1f; 揭晓答案 配置就是应用程序在启动和运行…...

js中find和findIndex的使用

ES6为Array增加了find()&#xff0c;findIndex函数。 find()函数用来查找目标元素&#xff0c;找到就返回该元素&#xff0c;找不到返回undefined。 findIndex()函数也是查找目标元素&#xff0c;找到就返回元素的位置&#xff0c;找不到就返回-1。 他们的都是一个查找回调函…...

配置多环境变量

配置多环境变量 package.json 里的 scripts 配置 serve test build&#xff0c;通过 --mode xxx 来执行不同环境 通过 npm run serve 启动本地 , 执行 development通过 npm run test 打包测试 , 执行 testing通过 npm run build 打包正式 , 执行 production "scripts&q…...

多环境变量配置

多环境变量配置 package.json 里的 scripts 配置 serve test build&#xff0c;通过 –mode xxx 来执行不同环境 通过 npm run serve 启动本地 , 执行 development 通过 npm run test 打包测试 , 执行 testing 通过 npm run build 打包正式 , 执行 production 在package.…...

投资理财1

1. 投资术语 熔断&#xff1a;也叫自动停盘机制&#xff0c;是指当股指波幅达到规定的熔断点时&#xff0c;交易所为控制风险采取的暂停交易措施。具体说是对某一合约在达到涨跌停板之前&#xff0c;设置一个熔断价格&#xff0c;使合约买卖报价在一段时间内只能在这一价格范围…...

【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

记录使用kaptcha的过程 为前后端分离项目&#xff0c;前端vue框架 0.下载jar包 在maven的网站https://mvnrepository.com/search?qcom.github.penggle 搜索下载jar 导入到工程中 1.添加依赖 <dependency><groupId>com.github.penggle</groupId><art…...

Unity行为树插件Behavior Tree Designer记录.Decorator装饰2

ReturnFailure The return failure task will always return failure except when the child task is running. 子Task运行期间将一直返回失败。主要重载了Decorate函数。在父类中的意义是申请改变子Task的状态。从代码上看也是这样&#xff0c;子Task的状态是成功&#xff0c…...

Mybatis源码研究之DatabaseIdProvider

借助Mybatis提供的 databaseId特性&#xff0c;我们可以实现让应用同时支持多种类型的数据库。 0. 目录这里写目录标题1. 测试用例2. 原理解析3. databaseId的其它应用4. Links1. 测试用例 相关的配置和测试用例如下 &#xff08;这里我们以源生的mybatis为例&#xff0c;与Sp…...

OA系统十四:注销功能;

注销&#xff1a;就是把登录时所保留的信息全部给清除掉&#xff1b;其本质就是清除保存在Session中的数据&#xff0c;让session回到初始的状态&#xff1b; 至于为什么只需要手动清除session对象中的数据&#xff0c;而request对象中的数据不用手动清除&#xff0c;这是因为r…...

并发编程之CountDownLatchSemaphoreCyclicBarrierExecutors

一、Semaphore Semaphore 定义 Semaphore 字面意思是信号量的意思&#xff0c;它的作用是控制访问特定资源的线程数目&#xff0c;底层依赖AQS的状态State&#xff0c;是在生产当中比较常用的一个工具类。 Semaphore常用方法 构造方法 public Semaphore(int permits) publ…...

vmmap分析内存泄露问题

vmmap是sysinternals工具集中的一个工具&#xff0c;主要用于分析一个进程的虚拟内存和物理内存的使用情况。更有效的是&#xff0c;可以通过对比两个不同时间的内存使用情况的Snapshot&#xff0c;来查找内存泄露问题。 vmmap介绍 当你用vmmap去查看一个正在运行的进程的时候…...

学生成绩管理系统+打包

文章目录文件管理&#xff1a;D:\hyt\python\pytorch_graduate\file_management成绩管理&#xff1a;D:\hyt\python\pytorch_graduate\stusystem打包&#xff1a;D:\hyt\python\pytorch_graduate\package_test学生成绩管理系统0.基础原理1.文件管理2 学生管理系统Tk打包1.基础原…...

Yocto Build with Bitbake的调试

https://docs.yoctoproject.org/dev-manual/common-tasks.html#recipe-logging-mechanisms 官方文档里有输出调试信息的方法。包含两种&#xff0c;一种是调用python的&#xff0c;一种是bash的。 建议直接使用warning方法&#xff0c;保证输出级别足够。 另外&#xff0c;在…...

Ways to Encrypt Password on Server

Background: the history of store password in server, starts with plain text, to MD5, SHA-1, SHA-2, to add salt/pepper/multihashing, to bcrypt/Argon2id etc. Best way so far to encrypt password on server : use bcrypt(unless have specific reasons not to do...

IntentService源码分析指南

转载链接&#xff1a;https://www.jianshu.com/p/8a3c44a9173a...

为啥集群小文件治理那么重要,你真的懂吗?

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…...

promise

promise是es6 中专门用来处理异步回调的&#xff0c;可以解决回调地狱 promise是一个构造函数&#xff0c;这个构造函数中放一个回调函数作为参数&#xff0c;这个回调函数中放的是异步的操作&#xff0c; 对于一个异步操作来说执行是需要时间的&#xff0c;所以一开始promise是…...

Flink大数据实时计算系列-第一个程序JAVA版本-分组统计

Flink大数据实时计算系列-第一个程序JAVA版本-分组 在基线版本上增加了分组统计的代码 #Flink代码 package com.flinkniu.flink.operator;import org.apache.flink.api.common.typeinfo.Types; import org.apache.flink...

boost::geometry::model::multi_polygon用法的测试程序

boost::geometry::model::multi_polygon用法的测试程序 实现功能C++实现代码实现功能 boost::geometry::model::multi_polygon用法的测试程序 C++实现代码 #include <algorithms/area/test_area.hpp> #include <boost/geometry/geometries/geometries.hpp> #inc…...

this、call、apply、bind

this的指向 作为普通函数&#xff08;也指对象的方法&#xff09;进行使用&#xff0c;谁去调用该函数&#xff0c;那么this便会指向谁。作为构造函数使用&#xff0c;指向该构造函数的实例。在箭头函数内部的使用&#xff0c;指向上一级函数的this&#xff1b;若上一级不是函…...

5.Random

用于生产一个随机数 步骤&#xff1a; 1.导包 import java.util.Random; 2.创建对象 Random random new Random();3.获取随机数 int number random.nextInt(10); //随机数的取值范围是[0,10),即大于等于&#xff0c;小于10 上面不能获取到10&#xff0c;若要获取到10&…...

hexo添加自动更新的站点统计页面

本站原来的站点统计图页面的统计数据需要博主我每个月手动统计上传非常的麻烦容易把人累死直到我看到了fox的统计页面又是我眼前一亮于是又去借鉴学习了一波&#xff0c;注本文大部分代码都出自fox大佬之手。另外如果你也想要利用GitHubactions定时自动更新请参考前文完成集成化…...

Java枚举类与注解——一篇文章读懂枚举类与注解

文章目录一、枚举类① 自定义枚举类② enum关键字定义枚举类③ enum 枚举类的方法④ enum 枚举类实现接口二、注解① 生成文档相关注解②注解在编译时进行格式检查③注解跟踪代码的依赖性&#xff0c;实现替代配置文件功能④ 自定义注解⑤ jdk提供的4种元注解⑥ JKD8 新特性&am…...

Linux部署PHP扩展kafuka

1、安装librdkafka cd /usr/local/src/ git clone https://github.com/edenhill/librdkafka.git cd librdkafka ./configure make make install ln -s /usr/local/lib/librdkafka.so.1 /usr/lib/2、安装php-rdkafka cd /usr/local/src/ git clone https://github.com/arnaud-…...

自然语言处理NLP之文本摘要、机器翻译、OCR、信息检索、信息抽取、校对纠错

自然语言处理NLP之文本摘要、机器翻译、OCR、信息检索、信息抽取、校对纠错 目录...

Kafka监控与调优-文末思维导图

监控 主流监控方式 JMXTrans InfluxDB Grafana 主机监控 机器负载&#xff1a;当前CPU工作量的度量&#xff0c;被定义为特定时间间隔内运行队列中的平均线程数&#xff0c;理论上接近0.7*cpu核数比较 CPU使用率 (1 - 空闲态运行时间/总运行时间) * 100%&#xff0c;建议…...

孤独一箭语录摘选

前言&#xff1a; 其实最近2个月一直在使用“乔帮主”的低吸大法&#xff0c;效果非常好&#xff0c;从他的 鱼和鸟类的比喻中&#xff0c;我意识到其中的奥秘&#xff0c;自己在什么时候是鱼类&#xff1b; 然后去第N次拜读了他的启蒙老师&#xff0c;“孤独一箭”的一些东西…...

认识python

认识python 一、什么是python Python是一种面向对象的解释型计算机程序设计语言,由 吉多范罗苏姆 开发&#xff0c;第一个公开发行版版发布于 1991 年。它常被昵称为胶水语言&#xff0c;能够把其他语言制作的各种模块&#xff08;尤其是C/C&#xff09;很轻松地联结在一起。…...

Servlet中request与response,解决中文乱码response.setContentType()

request&#xff1a;接受页面信息 解决post提交方式的乱码&#xff1a; request.setCharacterEncoding(“UTF-8”); 解决get提交的方式的乱码&#xff1a; parameter newString(parameter.getbytes(“iso8859-1”),“utf-8”); response:返回页面信息 发送端服务器与接收端…...

asp.net1018-企业人事管理系统#毕业设计

项目编号:asp.net1018-企业人事管理系统#毕业设计 运行环境&#xff1a;VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术&#xff1a;HTMLJSHTML 开发语言&#xff1a;C#&#xff0c;框架&#xff1a;asp.net 祖国繁荣富强&#xff0c;企业的数量也在不…...

人事管理java 课程设计_java课程设计人事管理系统

《java课程设计人事管理系统》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《java课程设计人事管理系统(31页珍藏版)》请在人人文库网上搜索。1、人事管理系统一. 系统需求分析&#xff1a; (1)系统的功能设计 (2)系统功能结构 (3)数据库设计 二. 功能模块开发 (1)查…...

企业管理表格模板

企业管理表格-采购管理 下载地址&#xff1a;企业管理表格-采购管理-其它文档类资源-CSDN文库 企业管理表格-仓库管理 下载地址&#xff1a;企业管理表格-仓库管理-其它文档类资源-CSDN文库 企业管理表格-工资管理 下载地址&#xff1a;企业管理表格-工资管理-其它文档类资源…...

c#程序设计实训报告心得体会_C程序设计实训个人总结(推荐五篇)

通过上个学期的C语言学习之后&#xff0c;这学期我开始了C语言的实训。这次实训一共有12道题&#xff0c;可以说这12道题要运用学过的所有C语言知识。刚开始的两天&#xff0c;由于长时间没有接触这科&#xff0c;所以编程的时候有一些困难&#xff0c;通过课下的复习我逐渐开始…...

万字 常用设计软件大盘点|如何选择自己最适合的软件【建议收藏】

&#x1f4e2;前言 今天给大家带来一篇设计软件的大盘点&#xff0c;总共近万字将市面上一些很火的设计软件都总结出来了 可以让新手设计师更好的选择设计软件&#xff0c;也可以让我们有需求的小伙伴得到自己所需要的工具&#xff01; 下面一起来看看吧&#xff01; --- …...

软件工程基础篇(五):结构化程序分析SA+结构化程序设计SP+详细设计

软件工程基础篇&#xff08;五&#xff09;&#xff1a;结构化程序分析SA结构化程序设计SP详细设计 推荐思维导图&#xff1a;https://www.jianshu.com/p/fca183849535 结构化程序分析&#xff08;简称SA&#xff09; 在软件的总体设计中&#xff0c;已经将系统划分为多个模块…...

程序设计方法和程序分析

1.概述 程序设计方法和程序分析是两个不同范围应用的技术。 程序设计方法是提高程序效率和确保程序正确性而产生的软件理论。经过战胜软件危机&#xff0c;丰富深刻的设计方法的出现&#xff0c;越来越多的应用编程&#xff0c;程序员和编程爱好者建立了程序设计方法学。 而程…...

Using VSCode git extensition to access Gitee on CentOS 7

CentOS 7 is an old Linux. The version of git on it is 1.8 However, vscode git extension expects git >2.0. step 1. upgrade git 1.8 to git 2.x. because VSCode likes git >2.0 follwing the instruction of https://www.endpointdev.com/blog/2021/12/ins...

程序员必备的17个软件开发工具,你常用的有几个?

对于每一位开发者而言&#xff0c;软件开发工具的重要性显然不言而喻。事实上&#xff0c;除了个人能力之外&#xff0c;它们也在团队的效率及实际生产力层面扮演着关键性角色。 在今天的文章中&#xff0c;我们整理出17款软件开发工具&#xff0c;如果您尚未尝试过其中部分工…...

Linux项目后端部署及JDKTomcatMySQL安装

前言 上一篇文章简单的分享了在VMware上安装linux系统&#xff0c;本篇文章将要分享的内容是使用linux系统完成项目的部署 一、前置准备工作 在Windows系统中&#xff0c;我们要在开发环境下才能进行项目的开发。那么在linux系统中也是&#xff0c;在安装完linux系统后&#xf…...

四轴飞行器灵活的运动性能

在TEDGlobal的机器人试验室里&#xff0c;拉菲洛安德烈展示了如运动员一般思考的四轴飞行器&#xff0c;四轴飞行器能根据被输入的运算法则灵活解决问题。在一系列漂亮演示中&#xff0c;安德烈展示了飞行器如何接球&#xff0c;掌握平衡及如何与人一同作出决定。让我们一同关注…...

四轴飞行器

四轴飞行器 早年做的一个四旋翼飞行器。 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录四轴飞行器http://forum.eepw.com.cn/thread/260559/1![在这里插入图片描述](https://img-blog.csdnimg.cn/20210118143930…...

【毕设项目】 基于stm32的四轴飞行器设计 - 物联网 嵌入式 单片机

1 简介 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天向大家介绍一个学长做的单片机项目 基于stm32的四轴飞行器设计 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/12540…...

四轴飞行器制作之姿态解算

这块区域主要是很多重点概念的理解吧&#xff1a;姿态解算、四元数、欧拉角、PID算法、互补滤波、卡尔曼滤波。这些不论哪一个都需要好好理解&#xff0c;才能将整个四轴飞行器飞控部分大致流程理解下来 互补滤波、卡尔曼滤波算法&#xff1a; 参考博客&#xff1a;https://blo…...

【毕业设计】四轴飞行器的设计与实现 - stm32 单片机 物联网

文章目录0 前言1 简介2 重点内容2.1 i2c通信2.2 mpu6050;2.3 互补滤波&#xff1b;2.4 获取期望姿态&#xff1b;2.5 PID控制算法&#xff1b;2.6 输出PWM信号0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525;…...

四轴飞行器之电调篇

电调是驱动电机用的调速器。电调对应使用的电机不同&#xff0c;分为有刷电调和无刷电调。目前我使用的四轴的电机为有刷直流电机&#xff0c;无 刷电机的操作相对来说比较麻烦&#xff0c;有刷电机就是四驱车上的那种。有刷电机一般需要一个功率器件去驱动&#xff0c;通过调…...

四轴飞行器姿态控制

四轴飞行器姿态控制 一、姿态解算相关概念 1.欧拉角 用来表示三维空间中运动物体绕坐标轴旋转的情况&#xff0c;即物体每时每秒的姿态可以由欧拉角表示。 2.四元数 四元数用于物体的旋转&#xff0c;是一种复杂但是效率较高的旋转方式。 对于一个物体的旋转&#xff0c…...

20210728用树莓派 DIY 四轴飞行器(硬件、故障保护、遥控、飞行模式)

https://mbb.eet-china.com/forum/topic/92385_1_1.html 20210728用树莓派 DIY 四轴飞行器&#xff08;硬件、故障保护、遥控、飞行模式&#xff09; 2021-7-28 11:00:24 只看该作者 倒序浏览阅读&#xff1a;849 回复&#xff1a;1 机械构造–第一部分 今天&#xff0c;我们…...

四轴飞行器、远程视频图像传输

摘要&#xff1a; 四轴飞行器,又称四旋翼直升机、四旋翼飞行器。它是一种多旋翼的新型飞行器。其十字形的特殊布局通过改变电机转速从而获得旋转机身的力,进而调整飞行器自身的姿态。因为飞行器本身固有一定的复杂性,历史上从未普及过大型的商用四轴飞行器。自从进入20世纪以来…...

四轴飞行器基本组成及其飞行原理详解

近日&#xff0c;自己组装了一台 四轴飞行器&#xff1b; 组装完后&#xff0c;便想深究其原理&#xff1b;避免只是 知其然&#xff0c;却不知其所以然&#xff1b; 查阅资料后&#xff0c;便在其他文章的基础上&#xff0c;将此文 归纳整理 出来&#xff1b; 文章末尾有参…...