当前位置:首页 > 后端开发 > 正文

java怎么去掉时间后后边的.0

Java中,可将 Date转为 SimpleDateFormat格式化字符串,用 HH:mm:ss等不含毫秒的模式,或对 LocalDateTime截取到秒级再转换,即可去掉时间后的”.0″

Java开发中,处理日期时间格式时经常会遇到需要去除末尾“.0”的需求(例如将2023-08-04 15:30:45.0转换为2023-08-04 15:30:45),以下是几种常见的实现方法及具体操作步骤:

通过SQL语句截断精度

如果数据来源于数据库(如Oracle),可直接在SQL查询时使用TO_CHAR函数控制输出格式。

SELECT TO_CHAR(your_date_column, 'YYYY-MM-DD HH24:MI:SS') FROM your_table;

此方式会直接返回不含秒数的字符串,天然避免“.0”问题,适用于仅需展示到秒级的场景。

优点 缺点
性能高效 依赖数据库特性,移植性较差
代码简洁 无法动态调整格式

Java端格式化工具类SimpleDateFormat

使用SimpleDateFormat指定目标模式,强制忽略小数部分,示例代码如下:

java怎么去掉时间后后边的.0  第1张

Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 不包含毫秒
String formattedDate = sdf.format(now);

若原始时间为带毫秒的对象(如java.sql.Timestamp),该方案会自动舍去多余位数,此方法适合本地化处理或后端逻辑中的中间转换。

关键参数解析 作用
yyyy 四位年份
MM 两位月份(自动补零)
dd 两位日期
HH:mm:ss 时分秒,无毫秒字段

Jackson序列化自定义处理器(针对JSON响应)

当通过REST API返回JSON数据时,可创建自定义序列化器继承JsonSerializer<Date>,重写serialize方法实现精准控制。

public class DateWithoutMillisecondSerializer extends JsonSerializer<Date> {
    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider provider) throws ... {
        // 将时间戳转为秒级Unix时间戳
        jsonGenerator.writeNumber(date.getTime() / 1000); 
    }
}
// 在实体类字段上添加注解:
private Date createTime; // @JsonSerialize(using = DateWithoutMillisecondSerializer.class)

此方案特别适用于微服务架构下的API统一规范,能有效减少前后端协商成本。

字符串后处理(通用型补救措施)

对于已生成含“.0”的字符串,可采用正则表达式替换:

String dirtyString = "2023-08-04 15:30:45.0";
String cleanedString = dirtyString.replaceAll("\.0$", ""); // 匹配结尾的.0并删除

需要注意的是,这种方法属于最后防线,应优先选择前三种规范化方案以保证数据一致性。

不同场景选型建议对比表

场景特征 推荐方案 理由
数据库层原始查询 SQL TO_CHAR 源头控制,减少传输冗余
纯Java业务逻辑处理 SimpleDateFormat 标准库支持,跨平台兼容性好
JSON接口响应优化 Jackson自定义序列化 精准控制序列化行为,符合API设计最佳实践
历史遗留系统修复 字符串替换 快速实施,但需谨慎验证边界条件

相关问答FAQs

Q1: 为什么用SimpleDateFormat格式化后仍然显示”.0″?

A: 这通常是因为传入的对象实际上是java.sql.Timestamp而非java.util.Date,由于Timestamp内部存储了纳秒精度的时间戳,即使值为0也会携带占位符,解决方案是改用new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parseObject(timestamp.toString())进行显式类型转换。

Q2: 如何在JSP页面优雅展示去除”.0″后的日期?

A: 推荐组合使用Struts2标签库与预格式化策略:

<%@ taglib prefix="s" uri="/struts-tags" %>
<!-假设action中已设置birthday属性为Date类型 -->
<s:date name="birthday" format="yyyy年MM月dd日 HH时mm分ss秒"/>

这种方式既保证了服务器端的数据准确性,又实现了前端展示的灵活性

0