如何将SQL datetime时间戳转换为可读时间并提取指定时间部分
解决思路:提取并格式化时间部分
嘿,刚好我之前处理过类似的需求,给你分享下具体的思路和代码示例,完全避开废弃的Date类,用现代日期API搞定:
核心思路
其实不用刻意“提取”时间部分——现代日期时间API支持直接通过格式化器指定你要输出的字段,跳过日期部分就行,比手动截取字符串靠谱多了(手动截容易踩格式变动的坑)。
以Java为例(因为你提到Date类弃用,应该是Java场景)
第一步:把字符串解析为现代日期时间对象
用LocalDateTime(因为你的时间戳带日期和时间,不含时区)配合DateTimeFormatter解析原字符串:import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class TimeFormatExample { public static void main(String[] args) { // 原时间戳字符串 String timestamp = "2017-12-27 03:31:31.243"; // 定义解析用的格式化器,匹配原字符串格式 DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); // 解析为LocalDateTime对象 LocalDateTime dateTime = LocalDateTime.parse(timestamp, parseFormatter);第二步:只格式化时间部分为目标格式
再定义一个只针对时间的格式化器,指定输出小时(12小时制)、分钟和上午/下午标识:// 定义时间格式化器,输出"h:mm a"格式 DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:mm a"); // 格式化得到目标时间字符串 String formattedTime = dateTime.format(timeFormatter); System.out.println(formattedTime); // 输出:3:31 AM } }如果想要小写的
am/pm,可以加上Locale设置,或者直接转小写:// 方法1:指定Locale DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:mm a", java.util.Locale.ENGLISH); // 方法2:格式化后转小写 String formattedTime = dateTime.format(timeFormatter).toLowerCase(); // 输出:3:31 am
其他语言的思路(比如JavaScript)
如果是前端场景,用Intl.DateTimeFormat同样能轻松实现:
const timestamp = "2017-12-27 03:31:31.243"; // 把字符串转为Date对象(注意替换空格为T,符合ISO格式) const date = new Date(timestamp.replace(' ', 'T')); // 格式化时间部分 const formattedTime = new Intl.DateTimeFormat('en-US', { hour: 'numeric', minute: 'numeric', hour12: true }).format(date); console.log(formattedTime); // 输出:3:31 AM // 转小写直接调用toLowerCase() console.log(formattedTime.toLowerCase()); // 3:31 am
总结一下:核心就是先把字符串解析为结构化的日期时间对象,再用格式化器只输出你需要的时间字段,完全不用手动截取字符串,既安全又易维护~
内容的提问来源于stack exchange,提问作者FevtheDev
相关产品推荐
相关产品推荐

