日期格式化的最佳实践:如何在Java中处理日期格式化

这篇具有很好参考价值的文章主要介绍了日期格式化的最佳实践:如何在Java中处理日期格式化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

当涉及到日期格式化时,了解正确的方式和最佳实践是至关重要的。
日期格式化是将日期转换为特定格式的过程,以便在应用程序开发中更好地展示、存储或交互。
以下内容展示常用的三种方式


一、使用format()方法

在Java中,你可以使用java.time.format.DateTimeFormatter类来格式化日期,并将格式化后的日期字符串返回给前端。
以下是一个示例:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class DateFormattingExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        String formattedDate = date.format(formatter);
        System.out.println(formattedDate);
        // 输出类似于 "2023-08-06" 的日期字符串
    }
}

在上述示例中,我们使用LocalDate来表示当前日期,然后创建一个DateTimeFormatter对象,
指定了期望的日期格式模式(例如,"yyyy-MM-dd"代表年、月、日)。
通过format()方法,我们将日期格式化为字符串,并将其打印出来。

二、使用注解@JsonFormat

首先,确保你的项目中引入了Spring Boot和相关的依赖。
在你的实体类中,可以使用注解@JsonFormat来指定日期字段的格式化方式。

例如:
先定义一个用户类:

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

@Data
public class User {
    private Long Id;
    private String name;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateDate;
}

测试调用返回User对象:

import com.example.result.Result;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@RestController
public class UserWebTest {
    @GetMapping("/getUser")
    public Result<?> aa(){
        User user = new User();
        user.setId(1L);
        user.setName("jljlm");
        user.setCreateDate(new Date());
        user.setUpdateDate(new Date());
        return Result.success(user);
    }

}

结果:
java日期格式化,java,开发语言

三、使用消息转换器

使用消息转换器(MessageConverter)来格式化日期步骤如下:

1.定义用户类

import lombok.Data;
import java.util.Date;

@Data
public class User {
    private Long Id;
    private String name;
    private Date createDate;
    private Date updateDate;
}

2.重写DateSerializer 方法

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

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

public class DateSerializer extends JsonSerializer<Date> {

    private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        String formattedDate = formatter.format(date);
        jsonGenerator.writeString(formattedDate);
    }
}

3.定义对象映射器:


import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.DateDeserializers;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;

/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
public class JacksonObjectMapper extends ObjectMapper {
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(Date.class,new DateDeserializers.DateDeserializer())
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(Date.class, new DateSerializer());


        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }

4.定义消息转换器

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

/**
 * 配置类,注册web层相关组件
 */
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
    /**
     * 扩展Spring MVC框架的消息转化器
     * @param converters
     */
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        //创建一个消息转换器对象
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
        converter.setObjectMapper(new JacksonObjectMapper());
        //将自己的消息转化器加入容器中
        converters.add(0,converter);
    }
}

5.调用测试

import com.example.result.Result;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@RestController
public class UserWebTest {
    @GetMapping("/getUser")
    public Result<?> aa(){
        User user = new User();
        user.setId(1L);
        user.setName("jljlm");
        user.setCreateDate(new Date());
        user.setUpdateDate(new Date());
        return Result.success(user);
    }

}

结果如下:
java日期格式化,java,开发语言

总结

@作者:加辣椒了吗?
简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!
java日期格式化,java,开发语言文章来源地址https://www.toymoban.com/news/detail-729111.html

到了这里,关于日期格式化的最佳实践:如何在Java中处理日期格式化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java8日期时间类LocalDateTime格式化

    Java8日期时间类LocalDateTime格式化

    LocalDateTime日期时间格式化 LocalDateTime localDateTime = LocalDateTime.now() System.out.println(now.format( DateTimeFormatter.ofPattern(\\\"yyyy-MM-dd HH:mm:ss\\\") )); 测试1 测试2 测试2的结果

    2024年02月08日
    浏览(7)
  • Java格式化日期,时间(三种方法,建议收藏)

    Java格式化日期,时间(三种方法,建议收藏)

    在java中String类格式化的方法,是静态format()用于创建格式化的字符串。 format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。 format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化

    2024年02月15日
    浏览(5)
  • JAVA中,日期格式化YYYY 与yyyy区别

    JAVA中,日期格式化YYYY 与yyyy区别

    在java中我们时常会使用到日期格式化,例如“YYYY-MM-dd”、“yyyy-MM-dd” 今天我们来看一下大写Y与小写y有什么不同。 先总结:尽量使用小写y来表示年份。 我们直接来看代码 1.将日期设置成2023年12月31日,并且分别使用大写Y和小写y进行格式化打印; 2.结果 我们惊讶的发现,

    2024年01月23日
    浏览(8)
  • Java程序设计入门教程--日期格式化类SimpleDateFormat

    Java程序设计入门教程--日期格式化类SimpleDateFormat

           在程序设计中,经常用到特定的日期格式,此时就可以使用 java.text 包中的 SimpleDateFormat 类来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。 目标格式 使用SimpleDateFormat类时,首先要定义一个要转换的日期时间目标格式。目标格

    2024年02月07日
    浏览(5)
  • 使用 uni-app 开发项目,日期和时间如何格式化?

    功能需求描述 在开发项目时,往往需要对从后端查询到的时间进行格式化,查到的时间格式一般都是 时间戳 ,一堆数字,这时候怎么转化成类似于  2023年8月15日 08:12:10  这样的格式? 在组件显示格式化后的日期 其实 uni-app 的官方拓展组件  uni-dateformat  就能实现这个需求

    2024年02月05日
    浏览(5)
  • 【Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

    【Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

    日期和时间在软件开发中经常被用到,无论是用于记录事件、计算时间间隔还是格式化日期以供用户友好的展示。Java 提供了强大的日期和时间处理工具,其中 SimpleDateFormat 类是一个重要的工具,用于格式化日期和时间,同时也支持解析日期和时间。本篇博客将深入探讨 Sim

    2024年02月09日
    浏览(10)
  • Java中日期时间格式化方法SimpleDateFormat和DateTimeFormatter使用完整示例及区别说明

    Java中日期时间格式化方法SimpleDateFormat和DateTimeFormatter使用完整示例及区别说明

    示例代码: 示例截图:  这里完整的用两种方法分别实现了日期和String的来回转换,鉴于SimpleDateFormat早已过时,且非线程安全,所以推荐大家首选使用DateTimeFormatter,用法基本都是差不多的。变化不大。但是DateTimeFormatter需要Java Level 8(8 - Lambdas, type annotations etc.),需留意。

    2023年04月09日
    浏览(9)
  • Java工具类——json字符串格式化处理

    Java工具类——json字符串格式化处理

    在我们拿到一团未经格式化的json字符串时,非常不方便查看,比如这样 因此随手写了个工具类用来格式化json。注意,原json字符串必须语法无误,并且不包含换行、空格、缩进等,否则会保留下来。 ok废话不多说上代码 运行后效果

    2024年01月17日
    浏览(12)
  • C# 格式化日期

    除去string.Format()可以对日期进行格式化之外,*.ToString()也可以实现相同的效果: 另一种写法:

    2024年02月15日
    浏览(7)
  • Oracle格式化日期

    Oracle格式化日期

    将oralce中时间格式为XXX年XX月XX日,如下图: 需要给年月日 添加引号 ,如to_char(sysdate,\\\'yyyy \\\"年\\\" mm \\\"月\\\" dd \\\"日\\\" \\\' );

    2024年02月15日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包