Java 日期类 API

news2024/9/27 17:23:50

1. jdk8 之前的日期 API

1.1. System 类 currentTimeMillis();

@Test  
public void test1() {  
	long timeMillis = System.currentTimeMillis();  
	System.out.println("timeMillis = " + timeMillis);  
}

1.2. java.util.Date 和 java.sql.Date

  1. java.sql.Datejava.util.Date 的子类:
  2. 两个构造器的使用
    1. new Date() ==> 获取当前的时间
    2. new Date(long timeMills) ==> 获取指定时间戳下的时间
  3. 两个方法的使用
    1. toString()
    2. getTime()==>获取当前Data对象的时间戳
Date date1 = new Date();
System.out.println("date1 = " + date1);   //date1 = Tue Jul 06 09:47:42 CST 2021
System.out.println("date1.getTime() = " + date1.getTime()); //date1.getTime() = 1625536103670

Date date2 = new Date(123456789L);
System.out.println("date2 = " + date2);  //date2 = Fri Jan 02 18:17:36 CST 1970

java.sql.Date date3 = new java.sql.Date(123456789L);
System.out.println("date3 = " + date3);  //date3 = 1970-01-02

//将java.util.Date转换成java.sql.Date
java.sql.Date date4 = new java.sql.Date(date1.getTime());
System.out.println("date4 = " + date4);  //date4 = 2021-07-06

1.3. java.text.SimpleDateFormat

@Test
public void test1() throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat();
    //格式化
    Date date = new Date();
    System.out.println("date = " + date);

    String format = sdf.format(date);
    System.out.println("format = " + format);

    //解析
    String str = "2019-08-12 12:00:00";
    //设置解析日期字符串的模式,可以在创建SimpleDateFormat(String pattern);设置
    sdf.applyPattern("yyyy-MM-dd hh:mm:ss");
    sdf.parse(str);
    System.out.println("str = " + str);
}

1.4. 线程安全的日期格式化工具类

public class DataUtils {
    /**
     * ThreadLocal 提供一种 lombda 构造方式
     * 返回此线程局部变量的当前线程的“初始值”。线程第一次使用 get() 方法访问变量时将调用此方法,
     * 但如果线程之前调用了 set(T) 方法,则不会对该线程再调用 initialValue 方法。通常,此方法
     * 对每个线程最多调用一次,但如果在调用 get() 后又调用了 remove(),则可能再次调用此方法。
     */
    private static ThreadLocal<DateFormat> threadLocal
            = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
 
    public static Date parse(String date) {
	    try {
		    return threadLocal.get().parse(date);
	    } catch (Exception e) {
		    return null;
		}
    }
 
    public static String format(Date date){
        return date != null ? threadLocal.get().format(date) : null;
    }

	public static Date parse(String date, String pattern) {
	    try {
		    return new SimpleDateFormat(pattern).parse(date);
	    } catch (Exception e) {
		    return null;
		}
    }
 
    public static String format(Date date, String pattern){
        return date != null ? new SimpleDateFormat(pattern).format(date) : null;
    }
}

LetterDate or Time ComponentExamples
GEra designatorAD
yYear1996; 96
YWeek year2009; 09
MMonth in year (context sensitive)July; Jul; 07
LMonth in year (standalone form)July; Jul; 07
wWeek in year27
WWeek in month2
DDay in year189
dDay in month10
FDay of week in month2
EDay name in weekTuesday; Tue
uDay number of week (1 = Monday, …, 7 = Sunday)1
aAm/pm markerPM
HHour in day (0-23)0
kHour in day (1-24)24
KHour in am/pm (0-11)0
hHour in am/pm (1-12)12
mMinute in hour30
sSecond in minute55
SMillisecond978
zTime zonePacific Standard Time; PST; GMT-08:00
ZTime zone-0800
XTime zone-08; -0800; -08:00

1.5. java.util.Calendar(日历)

  • Date 类的API大部分被废弃了,替换为 Calendar
  • Calendar 类是一个抽象类,主用用于完成日期字段之间相互操作的功能。
  • 获取 Calendar 实例的方法
    • 使用 Calendar.getInstance() 方法
    • 调用它的子类 GregorianCalendar(公历)的构造器。

修饰符和类型方法描述
static CalendargetInstance()获取使用默认时区和区域设置的日历。
static CalendargetInstance(Locale aLocale)获取使用默认时区和指定区域设置的日历。
static CalendargetInstance(TimeZone zone)获取使用指定时区和默认区域设置的日历。
static CalendargetInstance(TimeZone zone, Locale aLocale)获取具有指定时区和区域设置的日历。

Calendar 的相关方法:

  • public int get(int field):返回给定日历字段的值
  • public void set(int field,int value):将给定的日历字段设置为指定的值
  • public void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量
  • public final Date getTime():将Calendar转成Date对象
  • public final void setTime(Date date):使用指定的Date对象重置Calendar的时间

其中 field 的值为 Calendar 的一组静态常量:YEARMONTHDAY_OF_WEEKHOUR_OF_DAYMINUTESECOND等;

1.6. jdk8 之前的时间 API 缺陷

  1. 可变性:像日期、时间这样的类应该是不可变的;
  2. 偏移性Date 中的年份都是从 1900 年开始,月份都是从 0 开始的;
  3. 格式化:格式化只对 Date 类型数据有效,无法应用于 Calendar
  4. 安全性DateCalendar 都是线程不安全的,此外还不能处理闰秒的情况;

2. jdk8 新增的时间 API

新的日期 API

  1. java.time:包含值对象的基础包
  2. java.time.chrono:提供对不同的日历系统的访问
  3. java.time.format:格式化和解析时间和日期
  4. java.time.temporal:包括底层框架和扩展特性
  5. java.time.zone:包含时区支持的类

大多数情况只会用到基础包和 format 包,偶尔会用到 temporal

2.1. LocalDate、LocalTime、LocalDateTime

  1. LocalDate 代表 IOS 格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
  2. LocalTime 表示一个时间,而不是日期。
  3. LocalDateTime 是用来表示日期和时间的,这是一个最常用的类之一。
方法描述
now()/now(ZoneId zone)静态方法,根据当前时间创建对象/指定时区的对象
of(xx,xx,xx,xx,xx,xxx)静态方法,根据指定日期/时间创建对象
getDayOfMonth()/getDayOfYear()获得月份天数(1-31) /获得年份天数(1-366)
getDayOfWeek()获得星期几(返回一个 DayOfWeek 枚举值)
getMonth()获得月份, 返回一个 Month 枚举值
getMonthValue() / getYear()获得月份(1-12) /获得年份
getHours()/getMinute()/getSecond()获得当前对象对应的小时、分钟、秒
withDayOfMonth()/withDayOfYear()/withMonth()/withYear()将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
with(TemporalAdjuster t)将当前日期时间设置为校对器指定的日期时间
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours()向当前对象添加几天、几周、几个月、几年、几小时
minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours()从当前对象减去几月、几周、几天、几年、几小时
plus(TemporalAmount t)/minus(TemporalAmount t)添加或减少一个 Duration 或 Period
isBefore()/isAfter()比较两个 LocalDate
isLeapYear()判断是否是闰年(在LocalDate类中声明)
format(DateTimeFormatter t)格式化本地日期、时间,返回一个字符串
parse(Charsequence text)将指定格式的字符串解析为日期、时间
@Test
public void test1() {
    System.out.println("now()==============================");
    //now(): 获取当前日期,时间,日期+时间
    LocalDate localDate = LocalDate.now();
    LocalTime localTime = LocalTime.now();
    LocalDateTime localDateTime = LocalDateTime.now();

    System.out.println("localDate = " + localDate);	//2021-07-06
    System.out.println("localTime = " + localTime);	//18:05:16.139
    System.out.println("localDateTime = " + localDateTime);	//2021-07-06T18:05:16.140

    System.out.println("of()===============================");
    //of(): 根据指定日期/时间创建对象(没有偏移量)
    LocalDateTime localDateTimeWithOf = LocalDateTime.of(1999, 06, 12, 6, 30, 0);
    System.out.println("localDateTimeWithOf = " + localDateTimeWithOf);	///1999-06-12T06:30

    //getXxx():
    System.out.println("getXxx()===========================");
    int dayOfMonth = localDateTime.getDayOfMonth();
    System.out.println("dayOfMonth = " + dayOfMonth);	//6
    DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();	
    System.out.println("dayOfWeek = " + dayOfWeek);	    //TUESDAY
    System.out.println("dayOfWeek.getValue() = " + dayOfWeek.getValue()); //2

    System.out.println("with()=============================");
    //with(): 修改指定值===>返回一个新的对象
    LocalDateTime localDateTime1 = localDateTimeWithOf.withYear(2021);
    System.out.println("localDateTime1 = " + localDateTime1);	//2021-06-12T06:30
    LocalDateTime localDateTime2 = localDateTime1.withDayOfYear(120);
    System.out.println("localDateTime2 = " + localDateTime2);	//2021-04-30T06:30

    System.out.println("plusXxx()==========================");
    //plusXxx(): 在指定的年月日/时间上加上指定的值===>返回新的对象
    LocalDateTime localDateTime3 = localDateTime2.plusSeconds(30);
    System.out.println("localDateTime3 = " + localDateTime3);	//2021-04-30T06:30:30
    LocalDateTime localDateTime4 = localDateTime3.plusHours(8);
    System.out.println("localDateTime4 = " + localDateTime4);	//2021-04-30T14:30:30

    System.out.println("minusXxx()=========================");
    //minusXxx(): 在指定的年月日/时间上减去指定的值===>返回新的对象
    LocalDateTime localDateTime5 = localDateTime4.minusHours(8);
    System.out.println("localDateTime5 = " + localDateTime5);	//2021-04-30T06:30:30
    LocalDateTime localDateTime6 = localDateTime5.minusDays(120);
    System.out.println("localDateTime6 = " + localDateTime6);	//2020-12-31T06:30:30
}

![[image-20210706180759805.png]]

2.2. Instant

@Test
public void test1() {
    //now(): 获取本初子午线对应的标准时间
    Instant instant = Instant.now();
    System.out.println("instant = " + instant);

    //获取指定偏移量的标准时间,+表示东区;-表示西区
    //获取东八区,即北京时间
    OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));

    //获取标准时间对应的时间戳
    System.out.println("instant.toEpochMilli() = " + instant.toEpochMilli());

    //通过指定的毫秒数,获取Instant实例
    Instant instant1 = Instant.ofEpochMilli(1625569576277L);
    System.out.println("instant1 = " + instant1.atOffset(ZoneOffset.ofHours(8)));
}

2.3. DateFormatter

格式化和解析日期时间

  1. 预定义的标准格式:ISO_LOCAL_DATE_TIME; ISO_LOCAL_DATE; ISO_LOCAL_TIME
  2. 本地化相关的格式:
    1. ofLocalizedDateTime(FormatStyle.LONG)
      1. FormatStyle.LONG:2021年7月6日 下午07时52分01秒
      2. FormatStyle.MEDIUM:2021-7-6 19:52:14
      3. FormatStyle.SHORT:21-7-6 下午7:52
    2. ofLocalizedDate(FormatStyle.LONG)
      1. FormatStyle.FULL:2021年7月6日 星期二
      2. FormatStyle.LONG:2021年7月6日
      3. FormatStyle.MEDIUM:2021-7-6
      4. FormatStyle.SHORT:21-7-6
  3. 自定义的格式:ofPattern()
@Test
public void test1() {
    //1.预定义的标准格式:ISO_LOCAL_DATE_TIME; ISO_LOCAL_DATE; ISO_LOCAL_TIME
    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
    LocalDateTime localDateTime = LocalDateTime.now();
    String format = formatter.format(localDateTime);
    System.out.println("format = " + format);   //2021-07-06T19:57:29.391

    TemporalAccessor parse = formatter.parse("2021-07-06T19:42:01.801");
    //将TemporalAccessor转为LocalDateTime
    LocalDateTime localDateTime1 = LocalDateTime.from(parse);
    System.out.println("localDateTime1 = " + localDateTime1);       //2021-07-06T19:42:01.801

    //2.本地化相关的格式:ofLocalizedDateTime(FormatStyle.LONG)
    //提供了三个常量:
    // FormatStyle.LONG: 2021年7月6日 下午07时52分01秒
    // FormatStyle.MEDIUM: 2021-7-6 19:52:14
    // FormatStyle.SHORT: 21-7-6 下午7:52
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
    System.out.println(dateTimeFormatter.format(localDateTime));        //21-7-6 下午7:57

    //3.本地化相关的格式:ofLocalizedDate(FormatStyle.LONG)
    //提供了四个常量:
    // FormatStyle.FULL: 2021年7月6日 星期二
    // FormatStyle.LONG: 2021年7月6日
    // FormatStyle.MEDIUM: 2021-7-6
    // FormatStyle.SHORT: 21-7-6
    dateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
    System.out.println(dateTimeFormatter.format(localDateTime));        //21-7-6

    //4.自定义的格式:ofPattern()
    dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    System.out.println(dateTimeFormatter.format(localDateTime));        //2021-07-06
}

2.4. ZoneId 类中包含了所有的时区信息

  1. ZoneId.getAvailableZoneIds(); 获取所有的时区集
  2. LocalDateTime.now(ZoneId.of("Asia/Shanghai")); 获取指定时区的时间
@Test
public void test1() {
    //获得所有的时区集
    Set<String> zoneIds = ZoneId.getAvailableZoneIds();

    //获取上海时区的当前时间
    LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
    System.out.println("localDateTime = " + localDateTime); //2021-07-06T20:44:54.828
}

2.5. ZonedDateTime 带时区的日期时间

  1. ZonedDateTime.now(); 获取本时区的对象,不带时区
  2. ZonedDateTime.now(ZoneId.of(“Asia/Shanghai”)); 获取指定时区的对象
@Test
public void test2() {
    ZonedDateTime zonedDateTime = ZonedDateTime.now();
    System.out.println("zonedDateTime = " + zonedDateTime); //2021-07-06T20:44:22.490+08:00[Asia/Shanghai]

    ZonedDateTime zonedDateTime1 = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
    System.out.println("zonedDateTime1 = " + zonedDateTime1); //2021-07-06T20:44:22.490+08:00[Asia/Shanghai]
}

2.6. Duration 用于计算两个“时间”间隔,以秒和纳秒为基准

  1. Duration.between(TemporalAccessor time1, TemporalAccessor time2); 返回一个 Duration 对象实例
  2. duration.getSeconds(); 返回两个时间之间相差的秒数
  3. duration.getNano(); 返回两个时间相差的毫微妙(Long),对1秒取余
  4. duration1.toDays(); 返回两个时间相差的天数
@Test
public void test3() throws InterruptedException {
    LocalTime localTime1 = LocalTime.now();
    Thread.sleep(9543L);
    LocalTime localTime2 = LocalTime.now();

    Duration duration = Duration.between(localTime1, localTime2);
    System.out.println("duration = " + duration);   //duration = PT9.639S

    System.out.println("duration.getSeconds() = " + duration.getSeconds());
    //返回毫微妙级的long值
    System.out.println("duration.getNano() = " + duration.getNano());


    LocalDateTime localDateTime1 = LocalDateTime.of(2019, 6, 13, 8, 0, 0);
    LocalDateTime localDateTime2 = LocalDateTime.of(2019, 6, 15, 13, 30, 0);
    Duration duration1 = Duration.between(localDateTime1, localDateTime2);
    System.out.println("duration1 = " + duration1);
    System.out.println("duration1.toDays() = " + duration1.toDays());
}

2.7. Period 用于计算两个“日期”间隔,以年、月、日衡量

  1. Period.between(localDate2, localDate1); 返回一个 Period 对象实例
  2. period1.getYears()period1.getMonths()period1.getDays() 相差的年月日,三者拼在一起才是两个日期只差
  3. period1.withYears(int year); 设置 Period 对象实例;
  4. period1.addTo(TemporalAccessor time); 把当前 Period 对象记录的日期差加到指定的日期上,返回一个 TemporalAccessor
@Test
public void test4() {
    LocalDate localDate1 = LocalDate.of(2021, 7, 6);
    LocalDate localDate2 = LocalDate.of(2020, 6, 13);

    Period period1 = Period.between(localDate2, localDate1);
    System.out.println("period1 = " + period1);
    System.out.println("period1.getYears() = " + period1.getYears());   //1
    System.out.println("period1.getMonths() = " + period1.getMonths()); //0
    System.out.println("period1.getDays() = " + period1.getDays());     //23
    //所以两个日期相差了1年零23天

    //设置period1的值
    Period period2 = period1.withYears(2);
    //把当前相差的日期加到localDate1上,返回一个Date
    Temporal temporal = period1.addTo(localDate1);
    System.out.println("period2 = " + period2);
    System.out.println("temporal = " + temporal);
}

2.8. TemporalAdjuster 时间校正器

@Test
public void test5() {
    //获取当前日期的下一个周日是哪一天
    TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(DayOfWeek.SUNDAY);
    LocalDate localDate = LocalDate.now().with(temporalAdjuster);
    System.out.println("localDate = " + localDate);

    //返回当前日期的下一个工作日是哪一天
    LocalDate localDate2 = LocalDate.now().with(new TemporalAdjuster() {
        @Override
        public Temporal adjustInto(Temporal temporal) {
            LocalDate date = (LocalDate) temporal;
            if (date.getDayOfWeek().equals(DayOfWeek.FRIDAY)) {
                return date.plusDays(3);
            } else if (date.getDayOfWeek().equals(DayOfWeek.SATURDAY)) {
                return date.plusDays(2);
            } else {
                return date.plusDays(1);
            } }
    });
    System.out.println("localDate2 = " + localDate2);
}

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

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

相关文章

vue2项目升级到vue3经历分享5

写到第5篇了&#xff0c;解决了很多问题&#xff0c;还有一些需要调整 1 el-input-number指令兼容性调整 下面这个可编辑的表格&#xff0c;全是0&#xff0c;于是需要一个指令&#xff0c;让它自己实现如果是0&#xff0c;就置空&#xff1b;如果是数字就是格式化为千分位&…

男士内裤哪个品牌好穿?男士内裤品牌测评推荐,干货满满

随着时代的进步和发展&#xff0c;男士内裤现在普遍分为三角、平角、四角的三个大类&#xff0c;不过大多数男性朋友都是穿平角四角为主。虽然男士内裤款式众多&#xff0c;但大部分男同胞每一条内裤都是穿非常久的&#xff0c;实际上男士内裤需要定期更换才能保持更换的舒适性…

《十日终焉》中的定律整理-向虫队学习(举例+持续更新)

1、二八定律 二八定律&#xff0c;又称帕累托法则&#xff0c;也叫巴莱多定律。 是19世纪末20世纪初意大利经济学家巴莱多发明的。其中指出&#xff0c;约仅有20%的因素影响80%的结果。也就是说&#xff1a;所有变因中&#xff0c;最重要的仅有20%&#xff0c;虽然剩余的80%占…

第二证券今日投资参考:银保渠道合作限制松绑 低空旅游借势起飞

昨日&#xff0c;两市股指盘中震动上扬&#xff0c;沪指一度涨近1%续创年内新高&#xff0c;创业板指一度涨超2%。到收盘&#xff0c;沪指涨0.83%报3154.32点&#xff0c;深证成指涨1.55%报9788.07点&#xff0c;创业板指涨1.87%报1900.01点&#xff0c;科创50指数涨2.26%&…

如何让组织充满活力?你需要做好这七步

组织活力&#xff0c;通俗点说就是&#xff1a; 从竞争对手角度看&#xff0c;组织活力强的组织能做到竞争对手做不到的事情&#xff1b; 从客户角度看&#xff0c;组织活力强的组织&#xff0c;客户感受好&#xff1b; 从员工角度看&#xff0c;组织活力强的组织&#xff0c…

【速看】软考架构考前复习20问!你能答出多少?

马上就要进行今年的软考了&#xff0c;大家都准备得怎么样了呢&#xff0c;2024上半年的软考架构得分点你知道了吗&#xff1f; 目标不光是把历年母题的考点规律吃透&#xff0c;还要规划好各类题型的做题时间&#xff0c;除了纸质版还要上机模拟&#xff0c;更好的适应机考&am…

将java项目上传到GitHub步骤

文章目录 一、GitHub 作用二、github如何修改默认分支为master三、手把手教你把项目上传github上四、github怎么删除仓库或项目五、github配置ssh key密钥的步骤六、执行到push时报错的解决办法七、github怎么修改仓库语言 一、GitHub 作用 GitHub 是一个存放软件代码的网站&a…

上海计算机学会2023年9月月赛C++丙组T2Z形填充

题目描述 给定一个整数 n&#xff0c;再给定 n2 个字符&#xff0c;请将这些字符以 z 形排成一个 nn 的矩阵。 z 形的定义是&#xff0c;第一个字符在左上角&#xff0c;然后沿对角线以 z 形放置字符。对于 n4 &#xff0c;z 形排列的先后顺序标记如下&#xff1a; 输入格式 …

基于Spring Boot的网页即时聊天系统

目录 一、系统总体功能设计 二、开发工具及环境 三、前台系统主要功能实现界面展示 1.登入模块 2.主页模块 3.好友设置模块 4.好友动态模块 5.个人中心模块 6.好友设置详情 7.视频通话 8.语音通话 9.对消息操作 四、后台系统主要功能实现界面展示 1.登入模块 2.后…

Git 分支命令操作详解

目录 1、分支的特点 2、分支常用操作 3、分支的使用 3.1、查看分支 3.2、创建分支 3.3、修改分支 3.4、切换分支 3.5、合并分支 3.6、产生冲突 3.7、解决冲突 3.8、创建分支和切换分支说明 1、分支的特点 同时并行推进多个功能开发&#xff0c;提高开发效率。各个分…

show profile

功能 当你执行一个复杂的 SQL 查询时&#xff0c;这个命令可以帮助你了解查询的各个部分花费了多少时间&#xff0c;从而找到可能的性能瓶颈。默认情况下&#xff0c;参数处于关闭状态&#xff0c;并保存最近15次的运行结果 开启 查看是否支持 SHOW VARIABLES LIKE profili…

如何给文件和文件夹添加备注信息

1. 给文件添加备注信息 1. 打开文件夹&#xff0c;点击查看 → 选项 → 更改文件夹和搜索选项 → 勾除隐藏受保护的操作系统文件 → 勾选显示隐藏的文件、文件夹和驱动器&#xff1b; 2. listary工具搜索desktop.ini&#xff0c;随便点击一个desktop.ini文件&#xff0c;即可…

Java String转JSONObject时保持字段顺序不变

Java String转JSONObject时保持字段顺序不变 问题背景解决方案 问题背景 在业务接口开发过程中&#xff0c;有一个新增接口&#xff0c;需要支持批量新增数据&#xff0c;这时入参就需要用到 json 格式数据&#xff0c;且包含 list 集合&#xff0c;比如这样的数据格式&#x…

ZeptoMail邮箱API发送邮件的参数如何配置?

ZeptoMail邮箱API发送邮件的步骤&#xff1f;怎么使用API接口&#xff1f; 在使用ZeptoMail邮箱API发送邮件时&#xff0c;正确的参数配置是确保邮件能够成功发送的关键。下面&#xff0c;AokSend将详细介绍如何配置ZeptoMail邮箱API发送邮件的参数。 ZeptoMail邮箱API发送邮…

Web界面加持!数据库备份神器,助你轻松备份数据!

使用这款带有Web界面的数据库备份神器&#xff0c;你可以轻松设置定时备份&#xff0c;确保数据安全无忧。备份结果即时通知&#xff0c;让你随时掌握备份状态。备份完成后&#xff0c;你将收到备份结果通知。无论是成功备份还是出现错误&#xff0c;你都能及时了解备份情况&am…

Failed to start tomcat.service: Unit is not loaded properly: Bad message 如何解决?

错误 “Failed to start tomcat.service: Unit is not loaded properly: Bad message” 通常意味着的 tomcat.service systemd 配置文件存在语法错误或配置不正确。为了解决这个问题&#xff0c;一步步检查和修正这个服务文件。 1. 检查 tomcat.service 文件 首先&#xff0c…

初识 Linux线程

再学习完Linux进程后,本期,我们来讲解Linux线程 1.为什么需要线程 在之前学习进程前,我们写的所有代码几乎都是单个执行流的,也就是说我们的代码只有一条路走. 在学习进程后,我们可以通过fork进行进程创建,给进程分配任务进行多执行流执行任务,问题来了 那我们为什么还需要…

会员卡积分收银源码系统 支持多门店系统 带完整的安装代码包以及安装搭建教程

在数字化浪潮的推动下&#xff0c;传统零售行业面临着巨大的转型压力。为了满足现代消费者多样化的需求&#xff0c;提高门店管理效率和顾客满意度&#xff0c;小编给大家分享一款会员卡积分收银源码系统——支持多门店系统&#xff0c;并附带了完整的安装代码包以及安装搭建教…

Java后端初始化项目(项目模板)

介绍 emmmm&#xff0c;最近看了一些网络资料&#xff0c;也是心血来潮&#xff0c;想自己手工搭建一个java后端的初始化项目模板来简化一下开发&#xff0c;也就发一个模板的具体制作流程&#xff0c;&#xff08;一步一步搭建&#xff0c;从易到难&#xff09; ok&#xff…

【Android】Kotlin学习之数据容器 -- 集合

一. 定义 List : 是一个有序列表, 可通过下标访问元素. 元素可以在list中出现多次, 元素可重复 Set : 是元素唯一的集合, 一般来说Set中元素的顺序并不重要, 无序集合. Map : 是一组键值对, 键是唯一的, 每个键刚好映射到一个值, 值可以重复 二. 集合创建 三. 示例 mutabl…