Java8【有与无】【F1】日期时间 API(一站式服务)

1.简介

包 java.time

涵盖了所有处理日期(date),时间(time),日期/时间(datetime),时区(zone),时刻(instant),间隔(duration)与时钟(clock)的操作。

2.使用方式

  • 日期(年月日) java.time.LocalDate
  • 时间(时分秒) java.time.LocalTime
  • 日期时间(年月日时分秒) java.time.LocalDateTime
  • 时间戳  java.time.Instant
  • 时间间隔  java.time.Duration
  • 日期间隔  java.time.Period
  • 格式转换  java.time.format.DateTimeFormatter
  • 时区  java.time.ZonedDateTime  java.time.ZoneId【查看支持的时区】
// 获取当前日期时间
// 2019-04-26T11:27:00.348
LocalDateTime dateTime = LocalDateTime.now();

// 将当前日期时间减去两天
// 2019-04-24T11:27:00.348
dateTime = now.minusDays(2);

// 将当前日期时间加上五天
// 2019-05-01T11:27:00.348
dateTime = now.plusDays(5);

// 输出当前日期时间的年份
// 2019
now.getYear();

// 构造一个指定日期时间的对象.
// 2019-10-23T08:20
dateTime = LocalDateTime.of(2019, 10, 23, 8, 20);

// 获取当前时间的时间戳
// 2019-04-26T03:28:57.758Z
Instant instant = Instant.now();

// 既然中国在东八区,则要偏移8个小时,这样子获取到的时间才是自己电脑的时间
// 2019-04-26T11:28:57.758+08:00
OffsetDateTime dateTime = instant.atOffset(ZoneOffset.ofHours(8));

// 转换成毫秒,如果是当前时间的时间戳,结果跟System.currentTimeMillis()是一样的
// 1556249337758
long milli = instant.toEpochMilli();

LocalTime start = LocalTime.now();
try {
   //让线程睡眠3s
   Thread.sleep(3000);
} catch (Exception e) {
}
LocalTime end = LocalTime.now();
// 获取end和start的时间间隔
// PT3S
Duration duration = Duration.between(start, end);

//起始时间
LocalDate start = LocalDate.of(2018, 3, 4);
//终止时间
LocalDate end = LocalDate.of(2019, 8, 23);
//输出P1Y5M19D,Y代表年,M代表月,D代表日
Period period = Period.between(start, end);

// 日期格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 获取当前日期时间
//2019-04-26T13:29:54.871
LocalDateTime now = LocalDateTime.now();
// 格式日期时间
// 2019-04-26 11:53:38
String strNow = now.format(dtf);
// 将字符串转换成日期
//2019-04-26
LocalDate.parse(strNow, dtf);
DateTimeFormatter format = new DateTimeFormatterBuilder()
                     .parseCaseInsensitive()
                     .appendPattern("yyyy-MM-dd HH:mm:ss")
                     .toFormatter();
//2019-01-01T00:10:10
LocalDateTime.parse("2019-01-01 10:10:10", format);
    
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                     .appendPattern("yyyy-MM-dd HH:mm:ss")
                     .parseDefaulting(ChronoField.HOUR_OF_DAY,0)
                     .parseDefaulting(ChronoField.MINUTE_OF_HOUR,0)
                     .parseDefaulting(ChronoField.SECOND_OF_MINUTE,0)
                     .toFormatter();
//2019-01-01T00:10:10
LocalDateTime.parse("2019-01-01 00:10:10", formatter);
// 基于JDK1.8进行时间格式化(字符串转ISO-8601标准时间格式)

//Jdk7,将时间字符串转化为标准时间格式
String accessTime = "20181212162923";
if (accessTime != null && accessTime.trim().length() != 0) {
    Date time = new Date();
    //2018-09-09 19:15:14
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US);
    try {
        time = sdf.parse(accessTime);
    } catch (ParseException e) {
 
    }
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
    accessTime = sdf2.format(time);
    System.out.println(accessTime);
 
}
//输出:2018-12-12T16:29:23+08:00


//Jdk8,将字符串转换为标准的ISO-8601的时间格式
String timestamp = "20181212162923";
try {
   DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
   LocalDateTime dt1 = LocalDateTime.parse(timestamp,formatter);
   ZoneOffset offset = ZoneOffset.of("+08:00");
   OffsetDateTime date = OffsetDateTime.of(dt1,offset);
 
   DateTimeFormatter formatter2=DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
   timestamp=date.format(formatter2);
   System.out.println(timestamp);
} catch (DateTimeParseException ex) {
   ex.printStackTrace();
}
//结果:2018-12-12T16:29:23+08:00


//字符串-->>LocalDateTime
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse("2017-07-20 15:27:44", dateTimeFormatter);
System.out.println("字符串转LocalDateTime: " + localDateTime);
//输出:字符串转LocalDateTime: 2017-07-20T15:27:44
 
 
//LocalDateTime-->>字符串
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateString = dateTimeFormatter2.format(LocalDateTime.now());
System.out.println("日期转字符串: " + dateString);
//输出:日期转字符串: 2019-07-17 09:35:53


//获取时区 
System.out.println(LocalDateTime.now(ZoneOffset.systemDefault()).atZone(ZoneOffset.systemDefault()).getOffset());
//输出:+08:00

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是使用STM32F1标准库编写TIM8的定时器中断服务的代码: ```c #include "stm32f10x.h" void TIM8_IRQHandler(void) { if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET) { // 在这里编写定时器中断服务程序 // ... TIM_ClearITPendingBit(TIM8, TIM_IT_Update); } } int main(void) { // 初始化TIM8定时器 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1; // 定时器周期为1000个时钟周期 TIM_TimeBaseInitStruct.TIM_Prescaler = 72 - 1; // 定时器预分频为72 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 不分频 TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM8, &TIM_TimeBaseInitStruct); // 使能TIM8定时器中断 NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM8_UP_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); TIM_ClearITPendingBit(TIM8, TIM_IT_Update); TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE); // 启动TIM8定时器 TIM_Cmd(TIM8, ENABLE); while (1) { // 在这里编写主程序 // ... } } ``` 在这个例子中,我们使用TIM8定时器,并将其设置为每1000个时钟周期产生一次中断。在`TIM8_IRQHandler()`函数中,我们编写了定时器中断服务程序。在`main()`函数中,我们初始化TIM8定时器,并启动定时器和中断。在主程序中,我们可以编写其他程序逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴 韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值