java获取日期/时间
获取年月日、小时分钟秒
public class DateTimeTest {public static void main(String[] args) {Calendar cal = Calendar.getInstance();System.out.println(cal.get(Calendar.YEAR));System.out.println(cal.get(Calendar.MONTH)+1); // 0 - 11System.out.println(cal.get(Calendar.DATE));System.out.println(cal.get(Calendar.HOUR_OF_DAY));System.out.println(cal.get(Calendar.MINUTE));System.out.println(cal.get(Calendar.SECOND));// Java 8LocalDateTime dt = LocalDateTime.now();System.out.println(dt.getYear());System.out.println(dt.getMonthValue()); // 1 - 12System.out.println(dt.getDayOfMonth());System.out.println(dt.getHour());System.out.println(dt.getMinute());System.out.println(dt.getSecond());}
}
获取某月的最后一天
public static void main(String[] args) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//获取当前月第一天:Calendar c = Calendar.getInstance();c.add(Calendar.MONTH, 0);c.set(Calendar.DAY_OF_MONTH, 1);//设置为 1 号,当前日期既为本月第一天String first = format.format(c.getTime());System.out.println("===============first:" + first);//获取当前月最后一天Calendar ca = Calendar.getInstance();ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));String last = format.format(ca.getTime());System.out.println("===============last:" + last);//Java 8LocalDate today = LocalDate.now();//本月的第一天LocalDate firstday = LocalDate.of(today.getYear(), today.getMonth(), 1);//本月的最后一天LocalDate lastDay = today.with(TemporalAdjusters.lastDayOfMonth());System.out.println("本月的第一天" + firstday);System.out.println("本月的最后一天" + lastDay);
}
打印昨天的当前时刻
public class YesterdayCurrent {public static void main(String[] args) {Calendar cal = Calendar.getInstance();cal.add(Calendar.DATE, -1);System.out.println(cal.getTime());//java-8LocalDateTime today = LocalDateTime.now();LocalDateTime yesterday = today.minusDays(1);System.out.println(yesterday);}
}
格式化日期
public class DateFormatTest {public static void main(String[] args) {SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");Date date1 = new Date();System.out.println(oldFormatter.format(date1));// Java 8DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");LocalDate date2 = LocalDate.now();System.out.println(date2.format(newFormatter));}
}
获取从 1970 年 1 月 1 日 0 时 0 分 0 秒到现在的毫秒数
public static void main(String[] args) {System.out.println(Calendar.getInstance().getTimeInMillis());//第一种方式System.out.println(System.currentTimeMillis()); //第二种方式// Java 8System.out.println(Clock.systemDefaultZone().millis());
}
Java 8 日期/时间常用 API
1.java.time.LocalDate
LocalDate 是一个不可变的类,它表示默认格式(yyyy-MM-dd)的日期,我们可以使用 now()方法得到当前时间,也可以提供输入年份、月份和日期的输入参数来创建一个 LocalDate 实例。该类为 now()方法提供了重载方法,我们可以传入 ZoneId 来获得指定时区的日期。该类提供与 java.sql.Date 相同的功能,对于如何使用该类,我们来看一个简单的例子。
package com.gtt.helloword.test;import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;public class LocalDateExample {public static void main(String[] args) {//Current DateLocalDate today = LocalDate.now();System.out.println("Current Date=" + today);//Creating LocalDate by providing input argumentsLocalDate firstDay_2014 = LocalDate.of(2014, Month.JANUARY, 1);System.out.println("Specific Date=" + firstDay_2014);//Try creating date by providing invalid inputs//LocalDate feb29_2014 = LocalDate.of(2014, Month.FEBRUARY, 29);// Exception in thread "main" java.time.DateTimeException:// Invalid date 'February 29' as '2014' is not a leap year// Current date in "Asia/Kolkata", you can get it from ZoneId javadocLocalDate todayKolkata = LocalDate.now(ZoneId.of("Asia/Kolkata"));System.out.println("Current Date in IST=" + todayKolkata);//java.time.zone.ZoneRulesException: Unknown time-zone ID: IST//LocalDate todayIST = LocalDate.now(ZoneId.of("IST"));//Getting date from the base date i.e 01/01/1970LocalDate dateFromBase = LocalDate.ofEpochDay(365);System.out.println("365th day from base date= " + dateFromBase);LocalDate hundredDay2014 = LocalDate.ofYearDay(2014, 100);System.out.println("100th day of 2014=" + hundredDay2014);}
}
2.java.time.LocalTime
LocalTime 是一个不可变的类,它的实例代表一个符合人类可读格式的时间,默认格式是 hh:mm:ss.zzz。像LocalDate 一样,该类也提供了时区支持,同时也可以传入小时、分钟和秒等输入参数创建实例,我们来看一个简单的程序,演示该类的使用方法。
package com.gtt.helloword.test;import java.time.LocalTime;
import java.time.ZoneId;public class LocalTimeExample {public static void main(String[] args) {//Current TimeLocalTime time = LocalTime.now();System.out.println("Current Time="+time);//Creating LocalTime by providing input argumentsLocalTime specificTime = LocalTime.of(12,20,25,40);System.out.println("Specific Time of Day="+specificTime);//Try creating time by providing invalid inputs//LocalTime invalidTime = LocalTime.of(25,20);//Exception in thread "main" java.time.DateTimeException://Invalid value for HourOfDay (valid values 0 - 23): 25//Current date in "Asia/Kolkata", you can get it from ZoneId javadocLocalTime timeKolkata = LocalTime.now(ZoneId.of("Asia/Kolkata"));System.out.println("Current Time in IST="+timeKolkata);//java.time.zone.ZoneRulesException: Unknown time-zone ID: IST//LocalTime todayIST = LocalTime.now(ZoneId.of("IST"));//Getting date from the base date i.e 01/01/1970LocalTime specificSecondTime = LocalTime.ofSecondOfDay(10000);System.out.println("10000th second time= "+specificSecondTime);}
}
3.java.time.LocalDateTime
LocalDateTime 是一个不可变的日期-时间对象,它表示一组日期-时间,默认格式是 yyyy-MM-dd-HH-mm-ss.zzz。它提供了一个工厂方法,接收 LocalDate 和 LocalTime 输入参数,创建 LocalDateTime 实例。我们来看一个简单的例子。
package com.gtt.helloword.test;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZoneOffset;public class LocalDateTimeExample {public static void main(String[] args) {//Current DateLocalDateTime today = LocalDateTime.now();System.out.println("Current DateTime=" + today);//Current Date using LocalDate and LocalTimetoday = LocalDateTime.of(LocalDate.now(), LocalTime.now());System.out.println("Current DateTime=" + today);//Creating LocalDateTime by providing input argumentsLocalDateTime specificDate = LocalDateTime.of(2014, Month.JANUARY, 1, 10, 10, 30);System.out.println("Specific Date=" + specificDate);//Try creating date by providing invalid inputs//LocalDateTime feb29_2014 = LocalDateTime.of(2014, Month.FEBRUARY, 28, 25,1,1);//Exception in thread "main" java.time.DateTimeException://Invalid value for HourOfDay (valid values 0 - 23): 25//Current date in "Asia/Kolkata", you can get it from ZoneId javadocLocalDateTime todayKolkata = LocalDateTime.now(ZoneId.of("Asia/Kolkata"));System.out.println("Current Date in IST=" + todayKolkata);//java.time.zone.ZoneRulesException: Unknown time-zone ID: IST//LocalDateTime todayIST = LocalDateTime.now(ZoneId.of("IST"));//Getting date from the base date i.e 01/01/1970LocalDateTime dateFromBase = LocalDateTime.ofEpochSecond(10000, 0, ZoneOffset.UTC);System.out.println("10000th second time from 01/01/1970= " + dateFromBase);}
}
4. java.time.Instant
Instant 类是用在机器可读的时间格式上的,它以 Unix 时间戳的形式存储日期时间,我们来看一个简单的程序。
package com.gtt.helloword.test;import java.time.Duration;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.concurrent.TimeUnit;public class InstantExample {public static void main(String[] args) {//Current timestampInstant timestamp = Instant.now();System.out.println("Current Timestamp = " + timestamp);System.out.println("秒数:"+timestamp.getEpochSecond());System.out.println("毫秒数:"+timestamp.toEpochMilli());// 增加8个小时Instant instant = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));System.out.println("Current Timestamp = " + instant);// 指定区域为上海 亚洲时间ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault());System.out.println(zonedDateTime);//Instant from timestampInstant specificTime = Instant.ofEpochMilli(timestamp.toEpochMilli());System.out.println("Specific Time = " + specificTime);//Duration exampleDuration thirtyDay = Duration.ofDays(30);System.out.println(thirtyDay);}
}
5. 日期 API 工具
我们早些时候提到过,大多数日期/时间 API 类都实现了一系列工具方法,如:加/减天数、周数、月份数,等等。还有其他的工具方法能够使用 TemporalAdjuster 调整日期,并计算两个日期间的周期。
package com.gtt.helloword.test;import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Period;
import java.time.temporal.TemporalAdjusters;public class DateAPIUtilities {public static void main(String[] args) {LocalDate today = LocalDate.now();//Get the Year, check if it's leap yearSystem.out.println("Year " + today.getYear() + " is Leap Year? " + today.isLeapYear());//Compare two LocalDate for before and afterSystem.out.println("Today is before 01/01/2015? " + today.isBefore(LocalDate.of(2015, 1, 1)));//Create LocalDateTime from LocalDateSystem.out.println("Current Time=" + today.atTime(LocalTime.now()));//plus and minus operationsSystem.out.println("10 days after today will be " + today.plusDays(10));System.out.println("3 weeks after today will be " + today.plusWeeks(3));System.out.println("20 months after today will be " + today.plusMonths(20));System.out.println("10 days before today will be " + today.minusDays(10));System.out.println("3 weeks before today will be " + today.minusWeeks(3));System.out.println("20 months before today will be " + today.minusMonths(20));//Temporal adjusters for adjusting the datesSystem.out.println("First date of this month= " + today.with(TemporalAdjusters.firstDayOfMonth()));LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear());System.out.println("Last date of this year= " + lastDayOfYear);Period period = today.until(lastDayOfYear);System.out.println("Period Format= " + period);System.out.println("Months remaining in the year= " + period.getMonths());}
}
6. 解析和格式化
将一个日期格式转换为不同的格式,之后再解析一个字符串,得到日期时间对象,这些都是很常见的。我们来看一下简单的例子。
package com.gtt.helloword.test;import java.time.*;
import java.time.format.DateTimeFormatter;public class DateParseFormatExample {public static void main(String[] args) {//Format examplesLocalDate date = LocalDate.now();//default formatSystem.out.println("Default format of LocalDate=" + date);//specific formatSystem.out.println(date.format(DateTimeFormatter.ofPattern("d::MMM::uuuu")));System.out.println(date.format(DateTimeFormatter.BASIC_ISO_DATE));LocalDateTime dateTime = LocalDateTime.now();//default formatSystem.out.println("Default format of LocalDateTime=" + dateTime);//specific formatSystem.out.println(dateTime.format(DateTimeFormatter.ofPattern("d::MMM::uuuu HH::mm::ss")));System.out.println(dateTime.format(DateTimeFormatter.BASIC_ISO_DATE));Instant timestamp = Instant.now();//default formatSystem.out.println("Default format of Instant=" + timestamp);DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");指定区域为上海 亚洲时间ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault());System.out.println(formatter.format(zonedDateTime));//Parse examplesLocalDateTime dt = LocalDateTime.parse("27::2月::2014 21::39::48",DateTimeFormatter.ofPattern("d::MMM::uuuu HH::mm::ss"));System.out.println("Default format after parsing = " + dt);System.out.println(dt.format(DateTimeFormatter.BASIC_ISO_DATE));}
}
7. 旧的日期时间支持
旧的日期/时间类已经在几乎所有的应用程序中使用,因此做到向下兼容是必须的。这也是为什么会有若干工具方法帮助我们将旧的类转换为新的类,反之亦然。我们来看一下简单的例子。
package com.gtt.helloword.test;import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;public class DateAPILegacySupport {public static void main(String[] args) {//Date to InstantInstant timestamp = new Date().toInstant();//Now we can convert Instant to LocalDateTime or other similar classesLocalDateTime date = LocalDateTime.ofInstant(timestamp,ZoneId.of(ZoneId.SHORT_IDS.get("PST")));System.out.println("Date = " + date);//Calendar to InstantInstant time = Calendar.getInstance().toInstant();System.out.println(time);//TimeZone to ZoneIdZoneId defaultZone = TimeZone.getDefault().toZoneId();System.out.println(defaultZone);//ZonedDateTime from specific CalendarZonedDateTime gregorianCalendarDateTime = new GregorianCalendar().toZonedDateTime();System.out.println(gregorianCalendarDateTime);//Date API to Legacy classesDate dt = Date.from(Instant.now());System.out.println(dt);TimeZone tz = TimeZone.getTimeZone(defaultZone);System.out.println(tz);GregorianCalendar gc = GregorianCalendar.from(gregorianCalendarDateTime);System.out.println(gc);}
}
8.简单实用 java.time 的 API 实用
package com.gtt.helloword.test;import java.time.*;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.Chronology;
import java.time.chrono.HijrahChronology;
import java.time.format.DateTimeFormatter;
import java.time.temporal.IsoFields;
import java.util.Date;public class TimeIntroduction {public static void testClock() throws InterruptedException {//时钟提供给我们用于访问某个特定 时区的 瞬时时间、日期 和 时间的。Clock c1 = Clock.systemUTC(); //系统默认 UTC 时钟(当前瞬时时间 System.currentTimeMillis())System.out.println(c1.millis()); //每次调用将返回当前瞬时时间(UTC)Clock c2 = Clock.systemDefaultZone(); //系统默认时区时钟(当前瞬时时间)Clock c31 = Clock.system(ZoneId.of("Europe/Paris")); //巴黎时区System.out.println(c31.millis()); //每次调用将返回当前瞬时时间(UTC)Clock c32 = Clock.system(ZoneId.of("Asia/Shanghai"));//上海时区System.out.println(c32.millis());//每次调用将返回当前瞬时时间(UTC)Clock c4 = Clock.fixed(Instant.now(), ZoneId.of("Asia/Shanghai"));//固定上海时区时钟System.out.println(c4.millis());Thread.sleep(1000);System.out.println(c4.millis()); //不变 即时钟时钟在那一个点不动Clock c5 = Clock.offset(c1, Duration.ofSeconds(2)); //相对于系统默认时钟两秒的时钟System.out.println(c1.millis());System.out.println(c5.millis());}public static void testInstant() {//瞬时时间 相当于以前的 System.currentTimeMillis()Instant instant1 = Instant.now();System.out.println(instant1.getEpochSecond());//精确到秒 得到相对于 1970-01-01 00:00:00 UTC 的一个时间System.out.println(instant1.toEpochMilli()); //精确到毫秒Clock clock1 = Clock.systemUTC(); //获取系统 UTC 默认时钟Instant instant2 = Instant.now(clock1);//得到时钟的瞬时时间System.out.println(instant2.toEpochMilli());Clock clock2 = Clock.fixed(instant1, ZoneId.systemDefault()); //固定瞬时时间时钟Instant instant3 = Instant.now(clock2);//得到时钟的瞬时时间System.out.println(instant3.toEpochMilli());//equals instant1}public static void testLocalDateTime() {//使用默认时区时钟瞬时时间创建 Clock.systemDefaultZone() -->即相对于 ZoneId.systemDefault() 默认时区LocalDateTime now = LocalDateTime.now();System.out.println(now);//自定义时区LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Europe/Paris"));System.out.println(now2);//会以相应的时区显示日期//自定义时钟Clock clock = Clock.system(ZoneId.of("Asia/Dhaka"));LocalDateTime now3 = LocalDateTime.now(clock);System.out.println(now3);//会以相应的时区显示日期//不需要写什么相对时间 如 java.util.Date 年是相对于 1900 月是从 0 开始//2013-12-31 23:59LocalDateTime d1 = LocalDateTime.of(2013, 12, 31, 23, 59);//年月日 时分秒 纳秒LocalDateTime d2 = LocalDateTime.of(2013, 12, 31, 23, 59, 59, 11);//使用瞬时时间 + 时区Instant instant = Instant.now();LocalDateTime d3 = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());System.out.println(d3);//解析 String--->LocalDateTimeLocalDateTime d4 = LocalDateTime.parse("2013-12-31T23:59");System.out.println(d4);LocalDateTime d5 = LocalDateTime.parse("2013-12-31T23:59:59.999");//999 毫秒 等价于 999000000 纳秒System.out.println(d5);//使用 DateTimeFormatter API 解析 和 格式化DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");LocalDateTime d6 = LocalDateTime.parse("2013/12/31 23:59:59", formatter);System.out.println(formatter.format(d6));//时间获取System.out.println(d6.getYear());System.out.println(d6.getMonth());System.out.println(d6.getDayOfYear());System.out.println(d6.getDayOfMonth());System.out.println(d6.getDayOfWeek());System.out.println(d6.getHour());System.out.println(d6.getMinute());System.out.println(d6.getSecond());System.out.println(d6.getNano());//时间增减LocalDateTime d7 = d6.minusDays(1);LocalDateTime d8 = d7.plus(1, IsoFields.QUARTER_YEARS);//LocalDate 即年月日 无时分秒//LocalTime 即时分秒 无年月日//API 和 LocalDateTime 类似就不演示了}public static void testZonedDateTime() {//即带有时区的 date-time 存储纳秒、时区和时差(避免与本地 date-time 歧义)。//API 和 LocalDateTime 类似,只是多了时差(如 2013-12-20T10:35:50.711+08:00[Asia/Shanghai])ZonedDateTime now = ZonedDateTime.now();System.out.println(now);ZonedDateTime now2 = ZonedDateTime.now(ZoneId.of("Europe/Paris"));System.out.println(now2);//其他的用法也是类似的 就不介绍了ZonedDateTime z1 = ZonedDateTime.parse("2013-12-31T23:59:59Z[Europe/Paris]");System.out.println(z1);}public static void testDuration() {//表示两个瞬时时间的时间段Duration d1 = Duration.between(Instant.ofEpochMilli(System.currentTimeMillis() - 12323123),Instant.now());//得到相应的时差System.out.println(d1.toDays());System.out.println(d1.toHours());System.out.println(d1.toMinutes());System.out.println(d1.toMillis());System.out.println(d1.toNanos());//1 天时差 类似的还有如 ofHours()Duration d2 = Duration.ofDays(1);System.out.println(d2.toDays());}public static void testChronology() {//提供对 java.util.Calendar 的替换,提供对年历系统的支持Chronology c = HijrahChronology.INSTANCE;ChronoLocalDateTime d = c.localDateTime(LocalDateTime.now());System.out.println(d);}/*** 新旧日期转换*/public static void testNewOldDateConversion() {Instant instant = new Date().toInstant();Date date = Date.from(instant);System.out.println(instant);System.out.println(date);}public static void main(String[] args) throws InterruptedException {testClock();testInstant();testLocalDateTime();testZonedDateTime();testDuration();testChronology();testNewOldDateConversion();}
}
java获取日期/时间相关推荐
- java:JAVA获取日期时间加一年或加一月或加一天
//获取时间加一年或加一月或加一天 Date date = new Date(); Calendar cal = Calendar.getInstance(); cal.set ...
- JAVA获取日期时间加一年或加一月或加一天
//获取时间加一年或加一月或加一天 Date date = new Date(); Calendar cal = Calendar.getInstance(); c ...
- java 获取日期格式化时间_java获取当前时间并格式化
java获取当前时间并格式化 private static final DateTimeFormatter FORMAT_FOURTEEN = DateTimeFormatter.ofPattern( ...
- Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几
Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...
- 如何使用Java获取当前日期/时间
用Java获取当前日期/时间的最佳方法是什么? #1楼 采用: String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") ...
- java得到文件创建时间linux,linux java获取文件创建时间
linux java获取文件创建时间 [2021-01-31 07:35:22] 简介: 服务器 背景 有时候我们需要获取文件的创建时间. 例如: 我在研究 <xtrabackup 原理图&g ...
- Java获取系统时间
Java获取系统时间 Java获取系统时间 在java 中,有很多种方法都可以获取到系统的当前时间,但也需要到对应的类,不同的类自然有不同的方法.这里为大家介绍获取系统当前时间的四种方式. 1. 通过 ...
- Java获取当前时间(二)
import java.text.SimpleDateFormat; import java.util.Calendar; 方法一: SimpleDateFormat sdf = new Simple ...
- java获取当前时间和求时间差(分钟,秒钟,小时,年等)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.场景介绍 二.代码时间 1.获取当前时间 2.时间计算(加.减) 需求 前言 建议记住固定的api,因为是java ...
最新文章
- easyui 中combogrid 实现多选,反选效果
- WCF for .NET CF的一个应用及两个困惑的问题
- 聚集索引和非聚集索引实例
- Matlab中特征选择reliefF算法使用方法(分类与回归)
- SAP Commerce Cloud Spartacus UI 的 ActionClass 数据结构设计
- mac adb 找不到设备_win/Mac办公软件下载找不到资源?试试这三个强大的神器
- 南京张治中故居违规重建后标价6400万元出售
- 更新了android sdk出现aapt问题以及模拟器启动错误
- linux之strings命令
- 如何共享计算机磁盘,扩展群集共享磁盘的分区 - Windows Server | Microsoft Docs
- Linux shell 根据时间批量删除指定文件夹下的文件
- MySQL - 安装教程详细图解
- Lte/5G中的RSRP、RSRQ、SINR、MCS介绍
- ESP8266 WIFI模块调试及在QT Windows下的通讯
- 初创公司多产品线分红篇
- 电子信息工程求职目标_应用电子专业求职信范文合集6篇
- 深度学习发展历程(2012年以前)
- Win10 开始菜单丢失部分菜单项和部分应用快捷方式
- 电子词典的python3 结合网络编程项目实例源码
- Java支持的国家和语言
热门文章
- 为了反击爬虫,前端工程师的脑洞可以有多大?
- 慢节奏的和府,能否掌握资本带来的“加速度”
- 多模态机器学习简述(Guide to Multimodal Machine Learning)
- 求余小技巧 码农场 » POJ 3641 Pseudoprime numbers 题解 《挑战程序设计竞赛》
- Python|判断字符串是否符合日期要求
- 仿真软件测试工程师麦克,仿真工程师面试经验 - 共61条真实仿真工程师面试经验分享 - 职业圈...
- iPhone13充电宝哪个牌子好?iPhone13无线充电宝推荐
- 操作系统实验Ucore lab8+反馈队列
- 5,10,15,20-四-(4-二苯胺基-1-苯乙烯基)苯基卟啉(TPP-X4);紫色粉末5,10,15,20-四-(4-澳苯基)卟啉(TPP-Bra)齐岳供应
- 嵌入式ARM设计编程(三) 处理器工作模式