Java清理掉LocalDateTime毫秒

毫秒精度在有些业务场景没有必要存储,有时还会带来一些问题,清除它们可以简化处理和提高可读性。

清掉毫秒通常用于以下场景:

  1. 日志记录:在日志中,秒级别的时间戳足够精确,去掉毫秒可以减少日志的冗长和复杂性。

  2. 数据存储:在数据库中,某些字段(如创建时间、修改时间)通常以秒为单位存储,避免存储毫秒可以简化数据结构和查询。

  3. 用户界面:在用户界面中显示时间时,毫秒往往不需要,秒级别的时间更符合用户的需求,使信息更简洁易读。

  4. 数据同步:在不同系统或服务之间同步数据时,去掉毫秒可以避免因微小时间差异导致的同步冲突或问题。

一.LocalDateTime(常用)

  • LocalDateTime 是 Java 8 引入的日期时间类,它表示日期和时间,但不包含时区信息。

1. LocalDateTime.withNano(0) 方法会将当前 LocalDateTime 对象的纳秒部分设置为零。

import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        System.out.println("Original DateTime: " + dateTime);

        LocalDateTime clearedDateTime = dateTime.withNano(0);
        System.out.println("DateTime with Nano cleared: " + clearedDateTime);
    }
}

2.truncatedTo(ChronoUnit.SECONDS),截断到秒级别,自动去除毫秒部分。

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime truncatedDateTime = now.truncatedTo(ChronoUnit.SECONDS);
        System.out.println(truncatedDateTime);
    }
}

3.plusNanos(),这种方法常用于需要调整精度的情形,将当前时间加上负的纳秒值,从而清除毫秒部分。

import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime dateTimeWithoutMilliseconds = now.plusNanos(-now.getNano());
        System.out.println(dateTimeWithoutMilliseconds);
    }
}

二、除了使用 LocalDateTime 处理毫秒,还有以下几种方式来去除毫秒部分:

1.使用 SimpleDateFormat 类

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(now);
        
        System.out.println(formattedDate);
    }
}

2.使用 Instant 类与 ZonedDateTime 类

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        ZonedDateTime now = Instant.now().atZone(ZoneId.systemDefault());
        ZonedDateTime nowWithoutMilliseconds = now.withNano(0);

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(nowWithoutMilliseconds.format(formatter));
    }
}

3.使用 Calendar 类

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MILLISECOND, 0);
        Date nowWithoutMilliseconds = calendar.getTime();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(nowWithoutMilliseconds);

        System.out.println(formattedDate);
    }
}

以上这些方法各有适用场景,可以根据具体需求选择合适的方式来处理时间戳。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值