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

蓝桥杯题目 19730 神奇闹钟

题目:

问题描述

小蓝发现了一个神奇的闹钟,从纪元时间(19701970 年 11 月 11 日 00:00:0000:00:00)开始,每经过 xx 分钟,这个闹钟便会触发一次闹铃 (纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。

对于给出的任意一个格式为 уууу-MM-ddHH:mm:ssуууу-MM-ddHH:mm:ss 的时间,小蓝想要知道在这个时间点之前 (包含这个时间点) 的最近的一次闹铃时间是哪个时间?

注意,你不必考虑时区问题。

输入格式

输入的第一行包含一个整数 TT,表示每次输入包含 TT 组数据。

接下来依次描述 TT 组数据。

每组数据一行,包含一个时间(格式为 уууу-MM-ddHH:mm:ssуууу-MM-ddHH:mm:ss)和一个整数 xx,其中 xx 表示闹铃时间间隔(单位为分钟)。

输出格式

输出 TT 行,每行包含一个时间(格式为 уууу-MM-ddHH:mm:ssуууу-MM-ddHH:mm:ss),依次表示每组数据的答案。

样例输入

2
2016-09-07 18:24:33 10
2037-01-05 01:40:43 30

样例输出

2016-09-07 18:20:00
2037-01-05 01:30:00
//API是工具类
//java时间API:表示一套处理日期和时间发工具类,在java.time包里面
/*
核心类:LocalDateTime对象
表示没有时区的日期时间,比如 2023-05-08 14:30:00(和有时区的对比 2023-05-08T14:30:00+08:00[Asia/Shanghai])DateTimeFormatter-格式化:用于日期时间和字符串的相互转换
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm:ss");
*/import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;public class SimpleAlarmWithNewAPI {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int T = scanner.nextInt();scanner.nextLine();  // 读取换行符// 创建格式化器:定义输入输出格式//没有格式化器,程序不知道你的时间字符串是什么格式;而且输出时可能也是默认格式DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");for (int i = 0; i < T; i++) {String line = scanner.nextLine();String[] parts = line.split(" ");//通过空格切割,将年月日放在parts[0],时分秒放在parts[1]间隔放在parts[2]// 1. 解析输入时间:把字符串变成LocalDateTime对象String timeStr = parts[0] + " " + parts[1];  //将数组中的 年月日 时分秒再组合在一起// "2016-09-07 18:24:33"LocalDateTime givenTime = LocalDateTime.parse(timeStr, formatter);//把字符串变成没有时区的日期时间,以formatter的格式// 2. 获取间隔分钟数int x = Integer.parseInt(parts[2]);  // 10// 3. 核心计算:转换为时间戳进行计算// 将LocalDateTime转换为从1970年开始的秒数;  把"几月几日几点几分"变成"从起点开始数到第几秒"long totalSeconds = givenTime.toEpochSecond(java.time.ZoneOffset.UTC);  //纪元时间1970-01-01 00:00:00本身就是UTC时间;//toEpochSecond转换成纪元开始计算的秒数         ;ZoneOffset 表示时区偏移量,就是某个地区时间与世界统一时间(UTC)的差值。//为什么要选择用java.time.ZoneOffset.UTC  就是在调用toEposhSecond方法时以纪元时间为标准,因为不同时区,表示的时间不一样// 计算间隔秒数long intervalSeconds = x * 60L;  // 10分钟 = 600秒  // L 表示这是一个 long 类型的字面值。// 整数除法找到最近的闹铃时间戳long lastAlarmSeconds = (totalSeconds / intervalSeconds) * intervalSeconds;//最近响铃时间=(总时间/间隔)*间隔 ,只是去掉了余数,就是响铃过后多出来的时间
//去掉总时间中不能被间隔整除的"零头"部分// 4. 将时间戳转换回LocalDateTime         LocalDateTime.ofEpochSecond 的作用与 toEpochSecond 正好相反://把秒数转换回日期时间对象LocalDateTime alarmTime = LocalDateTime.ofEpochSecond(lastAlarmSeconds, 0, java.time.ZoneOffset.UTC);// 5. 格式化输出System.out.println(alarmTime.format(formatter));//以formatter的格式输出}scanner.close();}
}

这个代码是一点也看不懂,自己结合ai看了一下

http://www.dtcms.com/a/487968.html

相关文章:

  • 搜搜提交网站wordpress在线留言
  • 网站排名不稳定怎么办阿里网站销量做不起来怎么办
  • 软件开发工程师简历范文百度seo关键词优化软件
  • C4D域的重要修改层之冻结:动态效果的静态化利器
  • 长春火车站怎么做转载小说网站
  • 平台网站做等级保护测评做照片书哪个网站好
  • copyright-env-generator 软件著作权环境描述生成器
  • 南京网站建设案例WordPress 分类目录 加斜杠
  • 网站更换域名备案服务管理系统
  • 【Frida Android】基础篇8:Java层Hook基础——调用带对象参数的方法
  • 网站空间一年多少钱应聘ui设计师自我介绍
  • 免费自己制作网站教程以下不属于专用网页制作工具的是
  • 做墙绘一般在哪个网站美橙互联网站备案平台
  • 青岛网站设计哪家公司企业展厅设计公司价格表
  • 做自媒体怎么在其它网站搬运内容竞价推广是什么意思
  • 做一个15页的网站怎么做在vs2010里怎么做网站
  • 上海网站建设微信开发wordpress手机版刷新
  • kubeasz部署过程记录
  • 力扣面试经典150题,第7(lc121),8(lc122),9(lc55),10(lc45)题
  • 网页设计素材有两种分别是什么vueseo解决方案
  • LoRA微调
  • 网站建设咨询服务商上海网站推广珈维
  • 青岛cms建站系统顺德门户网站建设公司
  • 【评测】百炼大模型视频生成初体验
  • 算法---动态规划(Dynamic Programming, DP)
  • 如何建立网站会员系统吗电商网站怎么做seo
  • 西安SEO网站推广长治网站制作
  • 山东城建建设职业学院教务网站第一章 网站建设基本概述
  • 新网站多久被收录自己做的网站搜索不到
  • 算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!