Java 前后端时间格式转换

在 Web 开发里,时间格式处理既常见又关键。由于前端和后端对时间的表示、处理方式存在差异,熟练掌握时间格式的转换方法就显得尤为重要。这篇文章会深入探讨 Java 前后端时间格式转换的相关知识,特别是 Java 时间转换的多种方式,其中包含注解的使用。

常见的时间格式

在开始转换之前,我们先来了解一下常见的时间格式。

前端常见时间格式

在前端,常用的时间格式有YYYY-MM-DD(日期)、YYYY-MM-DD HH:mm:ss(日期和时间)等。例如2025-02-22、2025-02-22 12:30:00、02/22/2025 。

后端常见时间格式

在 Java 后端,常用的时间类有java.util.Date、java.time.LocalDate、java.time.LocalDateTime等。java.util.Date本身没有特定的显示格式,需要通过SimpleDateFormat或DateTimeFormatter来格式化显示 。java.time包下的类则更加方便,例如LocalDate表示日期,格式为YYYY-MM-DD,LocalDateTime表示日期和时间,格式为YYYY-MM-DD HH:mm:ss。

Java 后端时间格式转换方式

使用 SimpleDateFormat 进行转换(Java 8 之前)

SimpleDateFormat是 Java 中用于格式化和解析日期的类。

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

public class DateFormatExample {
    public static void main(String[] args) {
        // 格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date now = new Date();
        String formattedDate = sdf.format(now);
        System.out.println("格式化后的日期: " + formattedDate);

        // 解析日期
        String dateStr = "2025-02-22 12:30:00";
        try {
            Date parsedDate = sdf.parse(dateStr);
            System.out.println("解析后的日期: " + parsedDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

但SimpleDateFormat不是线程安全的,在多线程环境下使用可能会出现问题。

使用 DateTimeFormatter 进行转换(Java 8 及之后)

DateTimeFormatter是 Java 8 引入的新的日期时间格式化类,它更加线程安全和灵活。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatterExample {
    public static void main(String[] args) {
        // 格式化日期时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime now = LocalDateTime.now();
        String formattedDateTime = now.format(formatter);
        System.out.println("格式化后的日期时间: " + formattedDateTime);

        // 解析日期时间
        String dateTimeStr = "2025-02-22 12:30:00";
        LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeStr, formatter);
        System.out.println("解析后的日期时间: " + parsedDateTime);
    }
}

使用注解进行时间格式转换

在 Spring Boot 应用中,我们可以利用注解简化时间格式的处理。

  1. @JsonFormat 注解:用于在 Java 对象与 JSON 数据相互转换时格式化日期时间。假设我们有一个包含日期时间字段的实体类:

    import com.fasterxml.jackson.annotation.JsonFormat;
    import java.time.LocalDateTime;
    
    public class Order {
        private Long id;
        // 将LocalDateTime格式化为指定格式的字符串用于JSON输出
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        private LocalDateTime orderTime;
    
        // 省略getter和setter方法
    }

    在上述代码中,@JsonFormat注解标记在orderTime字段上,指定了输出到 JSON 时的格式为yyyy-MM-dd HH:mm:ss,并且设置了时区为东八区。这样,当我们将Order对象转换为 JSON 字符串时,orderTime字段会按照指定格式进行格式化。

  2. @DateTimeFormat 注解:主要用于将前端传递过来的字符串参数解析为日期时间类型。例如在 Controller 层接收前端传递的时间参数:
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@RestController
public class TimeController {

    @PostMapping("/processTime")
    public String processTime(
        // 将前端传递的字符串按指定格式解析为LocalDateTime
        @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {
        return "接收到的时间: " + time;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值