TimeUtils记录
/* long milliseconds 1500L; Log.d(Time, 四舍五入: TimeUtils.millisToSecondsRounded(milliseconds)); // 输出 2 Log.d(Time, 截断取整: TimeUtils.millisToSecondsTruncated(milliseconds)); // 输出 1 Log.d(Time, 向上取整: TimeUtils.millisToSecondsCeil(milliseconds)); // 输出 2 */ public class TimeUtils { // 四舍五入 public static long millisToSecondsRounded(long millis) { return Math.round(millis / 1000.0); } // 截断取整 public static long millisToSecondsTruncated(long millis) { return millis / 1000; } // 向上取整 public static long millisToSecondsCeil(long millis) { return (long) Math.ceil(millis / 1000.0); } /** * 将字符串灵活转换为毫秒时间戳 * param input 可能是日期时间字符串如 2026-07-23 06:00:08或数字字符串如 1758492008000 * return 毫秒时间戳 * throws IllegalArgumentException 如果无法解析 */ public static long toMilliseconds(String input) { if (StringUtils.isEmpty(input)) { return 0; } // 1. 尝试当作数字时间戳处理 if (isNumeric(input)) { try { return ensureMillisTimestamp(Long.parseLong(input)); // 改为调用新方法 } catch (NumberFormatException e) { throw new IllegalArgumentException(无法解析为时间戳数字: input, e); } } // 2. 否则按日期时间格式解析 DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss); try { LocalDateTime ldt LocalDateTime.parse(input, formatter); // 使用系统默认时区转时间戳 return ldt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); } catch (DateTimeParseException e) { throw new IllegalArgumentException(无法解析日期时间字符串: input, e); } } public static String toMillisecondsStr(String input) { return toMilliseconds(input) ; } /** * 确保时间戳是毫秒级如果不是如秒级10位则自动转为毫秒级 * p * 判断逻辑时间戳值小于 1000000000000L10^12视为秒级乘以1000转为毫秒 * 大于等于该阈值的视为已是毫秒级直接返回。 * * param timestamp 时间戳可能是秒级10位或毫秒级13位 * return 毫秒级时间戳 */ public static long ensureMillisTimestamp(long timestamp) { if (timestamp 0) { return timestamp; } // 小于 10^12 认为是秒级时间戳乘以 1000 转为毫秒 if (timestamp 1000000000000L) { return timestamp * 1000; } return timestamp; } /** * 确保时间戳是毫秒级String版本 * p * 先将字符串解析为 long再调用 {link #ensureMillisTimestamp(long)} 进行转换。 * * param timestampStr 时间戳字符串可能是秒级10位或毫秒级13位 * return 毫秒级时间戳解析失败返回 0 */ public static long ensureMillisTimestamp(String timestampStr) { if (StringUtils.isEmpty(timestampStr)) { return 0; } try { long timestamp Long.parseLong(timestampStr.trim()); return ensureMillisTimestamp(timestamp); } catch (NumberFormatException e) { return 0; } } /** * 支持指定时区的版本 * param input 同上 * param zoneId 时区ID如 Asia/Shanghai、UTC * return 毫秒时间戳 */ public static long toMilliseconds(String input, String zoneId) { if (isNumeric(input)) { return Long.parseLong(input); } DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss); LocalDateTime ldt LocalDateTime.parse(input, formatter); return ldt.atZone(ZoneId.of(zoneId)).toInstant().toEpochMilli(); } // 辅助方法判断字符串是否表示整数允许负号 private static boolean isNumeric(String str) { if (str null || str.isEmpty()) return false; int start (str.charAt(0) -) ? 1 : 0; for (int i start; i str.length(); i) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } /** * 计算年龄最正确的方式是用 LocalDate Period而不是时间戳相减 * param birthday 2025-7-5 * return */ public static int calculateAge(String birthday) { try { DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd); LocalDate birthDate LocalDate.parse(birthday, formatter); // 以“今天”为基准计算年龄 LocalDate today LocalDate.now(); return Period.between(birthDate, today).getYears(); } catch (Exception e) { return -1; } } }毫秒转秒取整在 Java 或 Android 中将毫秒转换为秒并取整四舍五入或直接截断可以通过以下方式实现1. 四舍五入取整long milliseconds 12345L; // 示例毫秒值 long seconds Math.round(milliseconds / 1000.0); // 四舍五入说明Math.round() 对浮点数结果进行四舍五入。除以 1000.0 确保结果是浮点数避免整数除法截断。2. 直接截断取整向下取整long milliseconds 12345L; long seconds milliseconds / 1000; // 直接截断说明整数除法会自动丢弃小数部分相当于 Math.floor()。3. 向上取整long milliseconds 12345L; long seconds (long) Math.ceil(milliseconds / 1000.0); // 向上取整注意事项精度问题如果毫秒值是 int 类型注意避免整数溢出例如使用 long 存储大数值。负数处理上述方法同样适用于负数例如 -1500ms 会转换为 -1s 或 -2s取决于取整方式

相关新闻

ownCloud高危漏洞CVE-2023-49103修复与安全加固实战指南

ownCloud高危漏洞CVE-2023-49103修复与安全加固实战指南

1. 项目概述:当ownCloud警报拉响时 如果你正在管理一个ownCloud实例,那么最近的安全圈里,关于CVE-2023-49103的讨论你一定不会陌生。这可不是一个普通的漏洞,它被标记为“高危”,核心问题在于ownCloud的 graphapi 应…

2026/10/29 13:34:58 阅读更多 →
NVM 管理Node.js版本

NVM 管理Node.js版本

为什么选择 NVM for Windows? 痛点NVM 解决方案多项目版本冲突一键切换 Node.js 版本,互不干扰手动卸载安装繁琐一条命令完成安装 / 切换 / 删除环境变量配置复杂自动管理 PATH,无需手动修改系统盘空间占用可自定义安装路径,释放…

2026/10/29 22:14:10 阅读更多 →
简单图判断

简单图判断

题目描述 给定一个包含 n n 个顶点和 m m 条边的无向图。顶点编号为 1 , 2 , . . . , n 1,2,...,n ,第 i i 条边连接顶点 a i a i ​和 b i b i ​,判断这个图是否为简单图 (无重边且无自环) ,如果是简单图,则输出 yes&am…

2026/10/24 21:28:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/28 23:48:14 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/29 8:45:01 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/29 9:52:56 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/28 22:10:30 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/29 9:51:34 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/29 8:44:28 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 17:01:10 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 9:42:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 19:25:09 阅读更多 →