日期相关工具类

日期相关工具类

  • 【一】介绍
    • 【1】SimpleDateFormat 为什么是线程不安全
    • 【2】解决 SimpleDateFormat 线程不安全的方法
  • 【二】LocalDate API
  • 【三】LocalTime API
  • 【四】LocalDateTime API
  • 【五】转换关系
    • 【1】LocalDateTime 与 LocalDate 之间的转换
    • 【2】LocalDateTime 与 Date 之间的转换
    • 【3】LocalDate 与 Date 之间的转换
    • 【4】LocalDate 与 String 之间的转换
    • 【5】LocalTime 与 String 之间的转换
    • 【6】LocalDateTime 与 String 之间的转换

【一】介绍

Java 中 1.8 之前有 date 类,date 类到了 1.8 大部分的方法被弃而且 date 类如果不格式化可读性十分差,而 simpledateformat 方法中 format 和 parse 方法都是线程不安全的。

1.8 之后出现了 localdate、localdatetime、localtime 这些类,而这些类使用了 final 来修饰,使得这些类是不可变的,一旦实例化,值就固定了,有点类似于 String 类,所以这些类都是线程安全的。

localdate 年月日、localtime 时分秒、localdatetime 年月日时分秒

【1】SimpleDateFormat 为什么是线程不安全

SimpleDateFormat 类主要负责日期的转换与格式化等操作,在多线程的环境中,使用此类容易造成数据转换及处理的不正确,因为 SimpleDateFormat 类并不是线程安全的,但在单线程环境下是没有问题的。

SimpleDateFormat 在类注释中也提醒大家不适用于多线程场景:
在这里插入图片描述
说的很清楚,SimpleDateFormat 不是线程安全的,多线程下需要为每个线程创建不同的实例。不安全的原因是因为使用了 Calendar 这个全局变量

在这里插入图片描述

format 方法在执行中,会操作成员变量 calendar 来保存时间 calendar.setTime(date) 。如果 SimpleDateFormat 是一个共享变量,SimpleDateFormat 中的 calendar 也就可以被多个线程访问到,所以问题就出现了。除了 format 方法以外,SimpleDateFormat 的 parse 方法也有同样的问题。至此,我们发现了 SimpleDateFormat 的弊端,所以为了解决这个问题就是不要把 SimpleDateFormat 当做一个共享变量来使用。

【2】解决 SimpleDateFormat 线程不安全的方法

(1)每次使用就创建一个新的 SimpleDateFormat

class DateUtils {public static Date parse(String formatPattern, String datestring) throws ParseException {return new SimpleDateFormat(formatPattern).parse(datestring);}public static String format(String formatPattern, Date date) {return new SimpleDateFormat(formatPattern).format(date);}
}

(2)加锁

class DateUtils {private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss");public static Date parse(String formatPattern, String datestring) throws ParseException {synchronized (simpleDateFormat) {return simpleDateFormat.parse(datestring);}}public static String format(String formatPattern, Date date) {synchronized (simpleDateFormat) {return simpleDateFormat.format(date);}}
}

(3)使用ThreadLocal

class DateUtils {private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() {@Overrideprotected DateFormat initialValue() {return new SimpleDateFormat("mm:ss");}};public static Date parse(String formatPattern, String datestring) throws ParseException {return threadLocal.get().parse(datestring);}public static String format(String formatPattern, Date date) {return threadLocal.get().format(date);}
}

(4)Java 8 引入了新的日期时间 API,并引入了线程安全的日期类
1-Instant:瞬时实例。
2-LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。
3-LocalTime:本地时间,不包含日期。
4-LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
5-ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

新 API 还引入了 ZoneOffSet 和 ZoneId 类,使得解决时区问题更为简便。

【二】LocalDate API

LocalDate类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息,这个类是不可变的和线程安全的。

now 根据当前时间创建LocalDate对象
of 根据指定年月日创建LocalDate对象
getYear 获得年份
getMonthValue 获得月份
getMonth 获得月份枚举值
getDayOfMonth 获得月份天数(1-31)
getDayOfWeek 获得星期几
getDayOfYear 获得年份中的第几天(1-366)
lengthOfYear 获得当年总天数
lengthOfMonth 获得当月总天数
toEpochDay 与时间纪元(1970年1月1日)相差的天数
plusDays 加天
plusWeeks 加周
plusMonths 加月
plusYears 加年
minusDays 减年
minusWeeks 减周
minusMonths 减月
minusYears 减年
withYear 替换年份
withYear 替换年份
withDayOfMonth 替换日期
withDayOfYear 替换日期
isBefore 是否日期在之前
isAfter 是否日期在之后
isEqual 是否是当前日期
isleapYear 是否是闰年

代码示例

// A.获取
//(1)获取当前日期 2022-04-20
System.out.println(LocalDate.now());
//(2)获取指定日期 2014-03-18
System.out.println(LocalDate.of(2014, 3, 18));
//(3)获取日期的年份 2022
System.out.println(LocalDate.now().getYear());
//(4)获取日期的月份 4
System.out.println(LocalDate.now().getMonthValue());
//(5)获取日期的日子 20
System.out.println(LocalDate.now().getDayOfMonth());
//(6)获取日期的星期 WEDNESDAY
System.out.println(LocalDate.now().getDayOfWeek());
//(7)当天所在这一年的第几天 110
System.out.println(LocalDate.now().getDayOfYear());
//(8)获取当年天数 365
System.out.println(LocalDate.now().lengthOfYear());
//(9)获取当月天数 30
System.out.println(LocalDate.now().lengthOfMonth());
//(10)与时间纪元(1970年1月1日)相差的天数,负数表示在时间纪元之前多少天 19102
System.out.println(LocalDate.now().toEpochDay());// B.运算
//(1)加一天
System.out.println("加1天:" + LocalDate.now().plusDays(1));
//(2)加一周
System.out.println("加1周:" + LocalDate.now().plusWeeks(1));
//(3)加一月
System.out.println("加1月:" + LocalDate.now().plusMonths(1));
//(4)加一年
System.out.println("加1年:" + LocalDate.now().plusYears(1));
//(5)减一天
System.out.println("减1天:" + LocalDate.now().minusDays(1));
//(6)减一周
System.out.println("减1周:" + LocalDate.now().minusWeeks(1));
//(7)减一月
System.out.println("减1月:" + LocalDate.now().minusMonths(1));
//(8)减一年
System.out.println("减1年:" + LocalDate.now().minusYears(1));// C.替换
//(1)替换年份
System.out.println("替换年份为1:" + LocalDate.now().withYear(1));
//(2)替换月份
System.out.println("替换月份为1:" + LocalDate.now().withMonth(1));
//(3)替换日子
System.out.println("替换日期为1:" + LocalDate.now().withDayOfMonth(1));
//(4)替换天数
System.out.println("替换天数为1:" + LocalDate.now().withDayOfYear(1));// D.比较
//(1)是否在当天之前
System.out.println("是否在当天之前:" + LocalDate.now().minusDays(1).isBefore(LocalDate.now()));
//(2)是否在当天之后
System.out.println("是否在当天之后:" + LocalDate.now().plusDays(1).isAfter(LocalDate.now()));
//(3)是否在当天
System.out.println("是否在当天:" + LocalDate.now().isEqual(LocalDate.now()));
//(4)是否是闰年
System.out.println("今年是否是闰年:" + LocalDate.now().isLeapYear());

【三】LocalTime API

LocalTime是一个不可变的时间对象,代表一个时间,格为 时 - 分 - 秒,时间表示为纳秒精度,这个类是不可变的和线程安全的。

static LocalTime now() 获取默认时区的当前时间
static LocalTime now(ZoneId zone) 获取指定时区的当前时间
static LocalTime now(Clock clock) 从指定时钟获取当前时间
of 根据指定的时、分、秒获取LocalTime 实例
getHour 获取小时字段
getMinute 获取分钟字段
getSecond 获取秒字段
getNano 获取纳秒字段
plusHours 增加小时数
plusMinutes 增加分钟数
plusSeconds 增加秒数
plusNanos 增加纳秒数
minusHours 减少小时数
minusMinutes 减少分钟数
minusSeconds 减少秒数
minusNanos 减少纳秒数
compareTo 时间与另一个时间比较
isAfter 检查时间是否在指定时间之后
isBefore 检查时间是否在指定时间之前

// A.获取
//(1)获取默认时区的当前时间 14:11:31.294
System.out.println(LocalTime.now());
//(2)获取指定时区的当前时间 14:11:31.392
System.out.println(LocalTime.now(ZoneId.of("Asia/Shanghai")));
//(3)从指定时钟获取当前时间 14:11:31.392
System.out.println(LocalTime.now(Clock.systemDefaultZone()));
//(4)指定获取时分秒
System.out.println(LocalTime.of(12, 30, 30));
//(5)指定获取时分
System.out.println(LocalTime.of(12, 30));
//(6)指定获取时分秒纳秒
System.out.println(LocalTime.of(12, 30, 30, 123));
//(7)获取小时字段
System.out.println("时: " + LocalTime.now().getHour());
//(8)获取分钟字段
System.out.println("时: " + LocalTime.now().getMinute());
//(9)获取秒字段
System.out.println("时: " + LocalTime.now().getSecond());
//(10)获取纳秒字段
System.out.println("时: " + LocalTime.now().getNano());// B.计算
//(1)增加一小时
System.out.println("增加1小时: " + LocalTime.now().plusHours(1));
//(2)增加三十分钟
System.out.println("增加30分钟: " + LocalTime.now().plusMinutes(30));
//(3)增加三十秒
System.out.println("增加30秒: " + LocalTime.now().plusSeconds(30));
//(4)增加一万纳秒
System.out.println("增加10000纳秒:" + LocalTime.now().plusNanos(10000));
//(5)减少一小时
System.out.println("减少1小时: " + LocalTime.now().minusHours(1));
//(6)减少三十分钟
System.out.println("减少30分钟: " + LocalTime.now().minusMinutes(30));
//(7)减少三十秒
System.out.println("减少30秒: " + LocalTime.now().minusSeconds(30));
//(8)减少一万纳秒
System.out.println("减少10000纳秒:" + LocalTime.now().minusNanos(10000));// C.比较
//(1)时间与另一个时间比较 0(相等)正数(大)负数(小)
System.out.println(LocalTime.now().compareTo(LocalTime.now()));
//(2)检查时间是否在指定时间之后
System.out.println(LocalTime.now().isAfter(LocalTime.now()));
//(3)检查时间是否在指定时间之前
System.out.println(LocalTime.now().isBefore(LocalTime.now()));

【四】LocalDateTime API

LocalDateTime是一个不可变的日期时间对象,代表日期时间,格式为 年 - 月 - 日 - 时 - 分 - 秒,这个类是不可变的和线程安全的。

static LocalDateTime now() 获取默认时区的当前日期时间
static LocalDateTime now(Clock clock) 从指定时钟获取当前日期时间
static LocalDateTime now(ZoneId zone) 获取指定时区的当前日期时间
static LocalDateTime of(LocalDate date, LocalTime time) 根据日期和时间对象获取LocalDateTime 实例
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) second) 根据指定的年、月、日、时、分、秒获取LocalDateTime 实例
getYear 获取年份
getMonth 使用月份枚举类获取月份
getDayOfMonth 获取日期在该月是第几天
getDayOfWeek 获取日期是星期几
getDayOfYear 获取日期在该年是第几天
getHour 获取小时
getMinute 获取分钟
getSecond 获取秒
getNano 获取纳秒
plusYears 增加年
plusMonths 增加月
plusWeeks 增加周
plusDays 增加天
plusHours 增加小时
plusMinutes 增加分
plusSeconds 增加秒
plusNanos 增加纳秒
minusYears 减少年
minusMonths 减少月
meminusWeeks 减少周
minusDays 减少天
minusHours 减少小时
minusMinutes 减少分
minusSeconds 减少秒
minusNanos 减少纳秒
isEqual 判断日期时间是否相等
isBefore 检查是否在指定日期时间之前
isAfter 检查是否在指定日期时间之后
toLocalDate 获取日期部分
toLocalTime 获取时间部分

代码示例

// A.获取
//(1)获取默认时区的当前日期时间
System.out.println(LocalDateTime.now());
//(2)获取指定时区的当前日期时间
System.out.println(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
//(3)从指定时钟获取当前日期时间
System.out.println(LocalDateTime.now(Clock.systemDefaultZone()));
//(4)根据日期和时间对象获取LocalDateTime实例
System.out.println(LocalDateTime.of(LocalDate.now(), LocalTime.now()));
//(5)根据指定的年、月、日、时、分、秒获取LocalDateTime实例
System.out.println(LocalDateTime.of(2019, 12, 7, 21, 48, 50));
//(6)获取年份
System.out.println("年 : " + LocalDateTime.now().getYear());
//(7)使用月份枚举类获取月份
System.out.println("月(英文) : " + LocalDateTime.now().getMonth());
//(8) 使用月份数字类获取月份
System.out.println(" 月(数字英文): " + LocalDateTime.now().getMonth().getValue());
//(9)获取日期在该月是第几天
System.out.println("天 : " + LocalDateTime.now().getDayOfMonth());
//(10)获取日期是星期几(英文)
System.out.println("星期几(英文) : " + LocalDateTime.now().getDayOfWeek());
//(11)获取日期是星期几(数字英文)
System.out.println("星期几(数字英文) : " + LocalDateTime.now().getDayOfWeek().getValue());
//(12)获取日期在该年是第几天
System.out.println("本年的第几天 : " + LocalDateTime.now().getDayOfYear());
//(13)获取小时
System.out.println("时: " + LocalDateTime.now().getHour());
//(14)获取分钟
System.out.println("分: " + LocalDateTime.now().getMinute());
//(15)获取秒
System.out.println("秒: " + LocalDateTime.now().getSecond());
//(16)获取纳秒
System.out.println("纳秒: " + LocalDateTime.now().getNano());
//(17)获取日期部分
System.out.println(LocalDateTime.now().toLocalDate());
//(18)获取时间部分
System.out.println(LocalDateTime.now().toLocalTime());// B.计算
//(1)增加天数
System.out.println("增加天数 : " + LocalDateTime.now().plusDays(1));
//(2)增加周数
System.out.println("增加周数 : " + LocalDateTime.now().plusWeeks(1));
//(3)增加月数
System.out.println("增加月数 : " + LocalDateTime.now().plusMonths(1));
//(4)增加年数
System.out.println("增加年数 : " + LocalDateTime.now().plusYears(1));
//(5)减少天数
System.out.println("减少天数 : " + LocalDateTime.now().minusDays(1));
//(6)减少月数
System.out.println("减少月数 : " + LocalDateTime.now().minusMonths(1));
//(7)减少周数
System.out.println("减少周数 : " + LocalDateTime.now().minusWeeks(1));
//(8)减少年数
System.out.println("减少年数 : " + LocalDateTime.now().minusYears(1));
//(9)增加小时
System.out.println("增加1小时: " + LocalDateTime.now().plusHours(1));
//(10)增加分钟
System.out.println("增加30分钟: " + LocalDateTime.now().plusMinutes(30));
//(11)增加秒数
System.out.println("增加30秒: " + LocalDateTime.now().plusSeconds(30));
//(12)增加纳秒
System.out.println("增加10000纳秒:" + LocalDateTime.now().plusNanos(10000));
//(13)减少小时
System.out.println("减少1小时:" + LocalDateTime.now().minusHours(1));
//(14)减少分钟
System.out.println("减少30分钟:" + LocalDateTime.now().minusMinutes(30));
//(15)减少秒数
System.out.println("减少30秒: " + LocalDateTime.now().minusSeconds(30));
//(16)减少纳秒
System.out.println("减少10000纳秒:" + LocalDateTime.now().minusNanos(10000));// C.比较
//(1)判断日期时间是否相等
System.out.println(LocalDateTime.now().isEqual(LocalDateTime.now()));
//(2)检查是否在指定日期时间之前
System.out.println(LocalDateTime.now().isBefore(LocalDateTime.now()));
//(3)检查是否在指定日期时间之后
System.out.println(LocalDateTime.now().isAfter(LocalDateTime.now()));

【五】转换关系

【1】LocalDateTime 与 LocalDate 之间的转换

//(1)LocalDateTime转化为LocalDate
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();
System.out.println(localDate);//(2)LocalDate转化为LocalDateTime
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime1 = localDate.atStartOfDay();
LocalDateTime localDateTime2 = localDate.atTime(8,20,33);
LocalDateTime localDateTime3 = localDate.atTime(LocalTime.now());System.out.println(localDateTime1);
System.out.println(localDateTime2);
System.out.println(localDateTime3);

【2】LocalDateTime 与 Date 之间的转换

//(1)LocalDateTime转化为Date
LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.println(date);//(2)Date转化为LocalDateTime
Date todayDate = new Date();
LocalDateTime ldt = todayDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(ldt);

【3】LocalDate 与 Date 之间的转换

//(1)localDate转化为Date
LocalDate localDate = LocalDate.now();
ZoneId zoneId = ZoneId.systemDefault();
Date date = Date.from(localDate.atStartOfDay().atZone(zoneId).toInstant());
System.out.println(date);//(2)Date转化为localDate
Date date1 = new Date();
ZoneId zoneId1 = ZoneId.systemDefault();
LocalDate localDate1 = date1.toInstant().atZone(zoneId1).toLocalDate();
System.out.println(localDate1);

【4】LocalDate 与 String 之间的转换

//(1)从文本字符串获取LocalDate实例
LocalDate localdate = LocalDate.parse("2022-04-21");
System.out.println(localdate);//(2)使用特定格式化形式从文本字符串获取LocalDate实例
String str = "2019-03-03";
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(str, fmt1);
System.out.println(date);//(3)使用特定格式化形式将LocalDate转为字符串
LocalDate today = LocalDate.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String dateStr = today.format(fmt);
System.out.println(dateStr);

【5】LocalTime 与 String 之间的转换

// (1)字符串转为LocalTime
LocalTime localdate = LocalTime.parse("12:01:02");
System.out.println(localdate);// (2)使用特定格式化将字符串转为LocalTime
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime date = LocalTime.parse("12:01:02", fmt1);
System.out.println(date);// (3)LocalTime转为字符串
LocalTime toTime = LocalTime.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm:ss");
String dateStr = toTime.format(fmt);
System.out.println(dateStr);

【6】LocalDateTime 与 String 之间的转换

//(1)字符串转为LocalDateTime
LocalDateTime ldt2 = LocalDateTime.parse("2019-12-07T21:20:06.303995200");
System.out.println(ldt2);//(2)使用特定格式化将字符串转为LocalDateTime
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt3 = LocalDateTime.parse("2019-12-07 21:20:06", df1);
System.out.println(ldt3);//(3)LocalDateTime转为字符串
LocalDateTime today = LocalDateTime.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String dateStr = today.format(fmt);
System.out.println(dateStr);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云云耀云服务器L实例评测|Elasticsearch的可视化Kibana工具安装 IK分词器的安装和使用

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍Elasticsearch的可视化Kibana工具安装&#xff0c;以及IK分词器的安装和使用。 其他相关的Elasticsea…

电影产业的数据洞察:爬虫技术在票房分析中的应用

概述 电影产业是一个庞大而复杂的行业&#xff0c;涉及到各种各样的因素&#xff0c;如导演、演员、类型、主题、预算、宣传、口碑、评分、奖项等。这些因素都会影响电影的票房收入&#xff0c;也会反映出电影市场的动态和趋势。为了更好地了解电影产业的数据洞察&#xff0c;…

华为云云耀云服务器L实例评测|RabbitMQ的Docker版本安装 + 延迟插件安装 QQ邮箱和阿里云短信验证码的主题模式发送

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍RabbitMQ的Docker版本安装和配置&#xff0c;延迟插件的安装&#xff1b;结合QQ邮箱和阿里云短信验证码…

CMMI5认证哪些企业可以申请

CMMI5认证哪些企业可以申请 什么是CMMI5认证 CMMI&#xff08;Capability Maturity Model Integration&#xff09;是一种用于评估组织的软件工程能力的国际标准。CMMI模型包括5个等级&#xff0c;其中CMMI5是最高等级&#xff0c;代表组织具有达到持续优化和创新的能力。获得…

Elasticsearch:多语言语义搜索

在此示例中&#xff0c;我们将使用多语言嵌入模型 multilingual-e5-base 对混合语言文档的 toy 数据集执行搜索。 使用这个模型&#xff0c;我们可以通过两种方式进行搜索&#xff1a; 跨语言&#xff0c;例如使用德语查询来查找英语文档在非英语语言中&#xff0c;例如使用德…

【计算机网络】高级IO初步理解

文章目录 1. 什么是IO&#xff1f;什么是高效 IO? 2. IO的五种模型五种IO模型的概念理解同步IO与异步IO整体理解 3. 阻塞IO4. 非阻塞IOsetnonblock函数为什么非阻塞IO会读取错误&#xff1f;对错误码的进一步判断检测数据没有就绪时&#xff0c;返回做一些其他事情完整代码myt…

Flutter笔记 - ListTile组件及其应用

Flutter笔记 ListTile组件及其应用 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133411883 目 录 1. …

计算机毕设 大数据工作岗位数据分析与可视化 - python flask

文章目录 0 前言1 课题背景2 实现效果3 项目实现3.1 概括 3.2 Flask实现3.3 HTML页面交互及Jinja2 4 **完整代码**5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要…

R实现数据分布特征的视觉化——多笔数据之间的比较

大家好&#xff0c;我是带我去滑雪&#xff01; 如果要对两笔数据或者多笔数据的分布情况进行比较&#xff0c;Q-Q图、柱状图、星形图都是非常好的选择&#xff0c;下面开始实战。 &#xff08;1&#xff09;绘制Q-Q图 首先导入数据bankwage.csv文件&#xff0c;该数据集…

VSC-HVDC直流输电matlab仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; VSC-HVDC直流输电仿真&#xff0c;换流站采用两电平结构&#xff0c;全控型器件&#xff08;IGBT&#xff09;&#xff0c;采用双环控制&#xff0c;包括电压外环&#xff0c;电流内环&#xff0c;分为d、q两…

使用关键字abstract 声明抽象类-PHP8知识详解

抽象类只能作为父类使用&#xff0c;因为抽象类不能被实例化。抽象类使用关键字abstract 声明&#xff0c;具体的使用语法格式如下&#xff1a; abstract class 抽象类名称{ //抽象类的成员变量列表 abstract function 成员方法1(参数); //抽象类的成员方法 abstract functi…

网络基础知识面试题1

VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)

GPU(国内外发展,概念参数(CUDA,Tensor Core等),类别,如何选型,NPU,TPU)

目录 前言 1.国内外GPU发展简述 2.GPU概念参数和选择标准 2.1 CUDA 2.2 Tensor Core 2.3 显存容量和显存位宽 2.4 精度 2.5 如何选择GPU 3.常见GPU类别和价格 3.1 GPU类别 3.2 GPU价格&#xff08;部分&#xff09; 3.3 GPU云服务器收费标准&#xff08;以阿里云为例&a…

五.docker+jenkins自动部署项目

一.敏捷开发相关概念 1.微服务的痛点 再来看一下我们的微服务架构 &#xff0c; 每个组件都需要服务器去部署&#xff0c;加起来可能需要几十个甚至上百个服务器。这样的微服务项目在部署上会遇到什么问题&#xff1f; 需要很多很多的服务器&#xff0c;服务器的采购安装&am…

Day-06 基于 Docker 安装 Nginx 镜像

1.去官方公有仓库查询nginx镜像 docker search nginx 2.拉取该镜像 docker pull nginx 3. 启动镜像&#xff0c;使用nginx服务&#xff0c;代理本机8080端口(测试是不是好使) docker run -d -p 8080:80 --name nginx-8080 nginx docker ps curl 127.0.0.1:8080

微服务保护(Sentinel)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

云安全之等级保护详解

等级保护概念 网络安全等级保护&#xff0c;是对信息系统分等级实行安全保护&#xff0c;对信息系统中使用的安全产品实行按等级管理&#xff0c;对信息系统中发生的信息安全事件分等级进行响应、处置。 网络安全等级保护的核心内容是&#xff1a;国家制定统一的政策、标准&a…

横向AlGaN/GaN基SBD结构及物理模型数据库的开发

GaN基功率器件凭借其临界电场高、电子饱和漂移速度大、热导率高等优良性能在大功率快充、充电桩、新能源汽车等领域具备广泛应用空间。为进一步助推半导体高频、高功率微电子器件的发展进程&#xff0c;天津赛米卡尔科技有限公司技术团队依托先进的半导体TCAD仿真平台成功开发出…

计算机网络八股

1、请你说说TCP和UDP的区别 TCP提供面向连接的可靠传输&#xff0c;UDP提供面向无连接的不可靠传输。UDP在很多实时性要求高的场景有很好的表现&#xff0c;而TCP在要求数据准确、对速度没有硬件要求的场景有很好的表现。TCP和UDP都是传输层协议&#xff0c;都是为应用层程序服…

【Java 进阶篇】深入了解JDBCTemplate:简化Java数据库操作

数据库操作是几乎所有现代应用程序的一部分。从存储和检索数据到管理业务逻辑&#xff0c;数据库操作是不可或缺的。在Java应用程序中&#xff0c;JDBCTemplate是一种强大的工具&#xff0c;可帮助开发人员轻松进行数据库操作。本文将深入探讨JDBCTemplate&#xff0c;了解它的…