首页
学习
活动
专区
圈层
工具
发布

用Java格式化日期

Java日期格式化详解

基础概念

在Java中,日期格式化是将Date对象或时间戳转换为特定格式的字符串表示,或者将格式化的日期字符串解析为Date对象的过程。Java提供了多种方式来处理日期格式化。

主要实现方式

1. SimpleDateFormat (传统方式)

代码语言:txt
复制
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatExample {
    public static void main(String[] args) {
        // 创建SimpleDateFormat对象并指定格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        // 格式化当前日期
        String formattedDate = sdf.format(new Date());
        System.out.println("当前时间: " + formattedDate);
        
        // 解析日期字符串
        try {
            Date parsedDate = sdf.parse("2023-05-15 14:30:00");
            System.out.println("解析后的日期: " + parsedDate);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. DateTimeFormatter (Java 8+ 推荐方式)

代码语言:txt
复制
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatterExample {
    public static void main(String[] args) {
        // 创建DateTimeFormatter对象
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        
        // 格式化当前日期
        LocalDateTime now = LocalDateTime.now();
        String formattedDate = now.format(formatter);
        System.out.println("当前时间: " + formattedDate);
        
        // 解析日期字符串
        LocalDateTime parsedDate = LocalDateTime.parse("2023-05-15 14:30:00", formatter);
        System.out.println("解析后的日期: " + parsedDate);
    }
}

常用格式模式

| 符号 | 含义 | 示例 | |------|---------------------|----------| | y | 年 | yyyy → 2023 | | M | 月 | MM → 05 | | d | 日 | dd → 15 | | H | 小时(0-23) | HH → 14 | | h | 小时(1-12, AM/PM) | hh → 02 | | m | 分钟 | mm → 30 | | s | 秒 | ss → 45 | | S | 毫秒 | SSS → 789 | | E | 星期几 | E → 周一 | | a | AM/PM标记 | a → 下午 |

优势比较

  1. SimpleDateFormat
    • 优点:兼容所有Java版本
    • 缺点:线程不安全,需要每次创建新实例或同步
  • DateTimeFormatter
    • 优点:线程安全,更好的API设计,支持更多日期时间操作
    • 缺点:需要Java 8+

常见问题及解决方案

问题1:SimpleDateFormat线程安全问题

原因:SimpleDateFormat不是线程安全的,多线程共享同一个实例会导致问题。

解决方案

  • 每次使用时创建新实例
  • 使用ThreadLocal
  • 升级到Java 8+并使用DateTimeFormatter
代码语言:txt
复制
// ThreadLocal解决方案
private static final ThreadLocal<SimpleDateFormat> threadLocalSdf = 
    ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));

问题2:时区处理不当

原因:未明确指定时区可能导致不同环境下的解析结果不同。

解决方案

代码语言:txt
复制
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); // 明确设置时区

// Java 8方式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    .withZone(ZoneId.of("Asia/Shanghai"));

问题3:解析失败

原因:输入字符串与格式模式不匹配。

解决方案

  • 确保格式模式与输入字符串完全匹配
  • 添加异常处理
代码语言:txt
复制
try {
    Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2023/05/15");
} catch (ParseException e) {
    System.out.println("日期格式不匹配");
}

应用场景

  1. 日志记录:统一日志中的时间格式
  2. 数据展示:在UI中显示格式化的日期
  3. 数据交换:与外部系统交互时的日期格式转换
  4. 数据库操作:将日期转换为适合数据库存储的格式

最佳实践

  1. 在Java 8+项目中优先使用java.time包中的类
  2. 将常用的日期格式模式定义为常量
  3. 明确处理时区问题
  4. 对用户输入的日期字符串进行严格验证
  5. 考虑使用第三方库如Joda-Time(适用于Java 8以下项目)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JAVA 日期格式化

最近项目中需要用到SimpleDateFormat 格式化日期,但是因为对日期格式的不熟练多花了十分钟左右的时间在日期格式化上面,所以趁着周末外面下着大雨闲着无聊整理一下日期格式问题。...日期格式化学习 预定义格式 日期格式化样式 自定义日期格式化 预定义格式 java提供了预定义的日期格式,预定义的日期格式可以满足绝大多数的场景需要。...格式化日期需要两步: 1、通过DateFormat.getDateInstance() 获取一个DateFormat对象。...在通过DateFormat.getDateInstance()创建实例时使用了默认的日期格式化样式,DateFormat还提供了其他格式化样式。...自定义日期格式化 如果预定义的日期格式化不好用的话可以使用自定义日期格式化。使用自定义日期格式化需要创建SimpleDateFormat实例。

3.5K10
  • Java日期格式化

    常用的日期格式化的模板 1.3.4. 实例 1.4. Calendar 1.4.1. 创建对象 1.4.2. 常用方法 1.4.3....不过还是需要了解一下的,为了后面的学习做铺垫 构造方法 new Date() 常用的方法 long getTime() 返回计算机上面的时间,返回的是毫秒 setTime(long s) 用给定的毫秒值...pattern) 使用指定的格式化模板创建对象 常用的方法 String format(Date date) 将给定的日期格式化指定的模板的样式,比如2017-01-29 23:22:11...Date对象,需要注意的是转化的时候定义的模板一定要和字符串的日期格式的模板一样,否则将会解析不正确的形式 常用的日期格式化的模板 实例 使用默认的模板格式化日期 SimpleDateFormat...System.out.println(formateString); 使用指定的模板格式化日期 String model="yyyy-MM-dd-FF HH:mm:ss"; //指定格式化的模板

    3K10

    JAVA日期格式化(Simpledateformat)

    Java日期格式化常用方法 Java中Date类中的一些日期格式话方法都已过期,所以不推荐使用。...一般格式化时,常用到这两个类:Calendar 和SimpleDateFormat ,使用方法如下: 1.Calendar类 Calendar类是abstract的,所以实例化方式得用静态方法: Calendar...一种流行的说法:在C++ 里,是系统在做垃圾回收;而在Java 里,是Java 自身在做。 在C++ 里, 释放内存是手动处理的,要用delete运算符来释放分配的内存。这是流行的说法。...确切地说,是应用认为不需要某实体时,就需用delete告诉系统,可 以 …… 首先我们要先写一个备份类 BackupDb.java 代码如下: import java.io.BufferedWriter...; import java.io.FileWriter; import java.io.IOException; import java.sql.SQLException; import java.text.SimpleDateFormat

    1.1K30

    Java格式化日期 微秒

    Java格式化日期 微秒 本文主要讲述Java日期格式化及格式化日期到微秒 Date、LocalDateTime格式化微秒值 java代码TestTime.java如下 package com.dongao.test...; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId...getDateTimeFormat(String dateFormat) { return DateTimeFormatter.ofPattern(dateFormat); } } 格式化结果执行...通过执行结果可以看到用SimpleDateFormat对含有微秒值的时间格式在字符串转Date时除了会出现精度丢失的情况,部分时间还会出现转换错误的情况,而用DateTimeFormatter...但是一般业务不会用到时间格式的毫秒或者说微秒值,如果真的用到的话建议用LocalDateTime存储,Mysql需要用datetime(6)这样就可以保存微秒值的时间,如图 Date、LocalDateTime

    42710

    Java SimpleDateFormat进行日期格式化

    日期格式化显示 3. 将字符串转换为对应日期 1....为啥要用SimpleDateFormat 众所周知,Java中的日期类是Date,然后日期默认的输出样式很奇怪哦,是这样子的: package org.maoge.common; import java.util.Date...日期格式化显示 首先要记住一些标记:(注意大小写) 年yyyy 月MM 日dd 时HH 分mm 秒ss 毫秒SS 然后直接看例子: package org.maoge.common; import java.text.SimpleDateFormat...//默认输出格式 Date date=new Date(); System.out.println(date);//Fri Oct 27 16:56:37 CST 2017 //日期格式化显示...将字符串转换为对应日期 注意,因为可能定义的格式和实际字符串提供的格式不符合,所以会抛出异常 package org.maoge.common; import java.text.ParseException

    75410

    Java 时间格式化(java中如何格式化一个日期)

    = new SimpleDateFormat(“yyyy-MM-dd”); //格式化当前系统日期 String dateTime = dateFm.format(new java.util.Date...字符的个数决定了日期是如何格式化的.传递”EE-MM-dd-yy”会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示....三、将文本数据解析成日期对象 假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象....方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程....以下的例子展示的是一个简单的格式化日期的代码: import java.text.*; import java.util.Locale; import java.util.Date; public

    6.9K30

    Java获取时间格式化日期代码总结

    我们在Java开发过程中,少不了与时间打交道,比如根据两个日期得出相差的时分秒,时间加减,时间累加,前5分钟,前一个月,前一年,等等...所以我从网上搜集一些常用的时间/日期格式化代码,以飨读者。...在JAVA中有六个与时间有关的类: java.util.Date java.sql.Date java.sql.Time java.sql.Timestamp java.text.SimpleDateFormat...java.util.Calendar 常用的函数也就是下面的几个: Date:getTime() 、setTime() DateFormat:getInstance()、getDateInstance...: 全部源代码(从网上借鉴的一部分代码,完善后成功运行并加了注释): import java.text.DateFormat; import java.text.ParsePosition; import...java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar

    4.5K40

    SpringMVC日期格式化

    一、关于SpringMVC日期的格式化大概可分为四点 1....@ResponseBody方式返回json的日期格式化 2.ajax方式返回json的日期格式化 3.数据保存时String转Date 4.页面展示时,Date转固定格式的String 二、配置实现日期格式化...* 这里用的json包围fastjson,所以设置SerializeConfig,字段上注解用@JSONField(format="yyyy-MM-dd HH:mm:ss"),具体格式根据需要自定义...(o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } 或者用日期选择器插件,初始化日期 4.见过最邪门的是公司的...SpringCloud项目,去掉了所有配置文件的日期格式化,去掉了硬编码的java类配置与日期格式化相关的类,字段也没调用js和用format标签,但是thyemeleaft模板就是将日期格式化了。

    4.4K20

    Java魔法堂:Date与日期时间格式化

    好了,现在我们有了日期时间源数据就可以着手格式化了。 四、 Java代码中的日期时间格式化                   1.  ...)格式化为文本,通过 parse() 方法将文本解析为日期对象( java.util.Date )。  ... 内部使用了 java.util.Calendar 来获取 java.util.Date实例 的时分秒等部分,并进行格式化处理。...好处:方便对日期时间进行本地化。   缺点:无法直接修改日期时间模式。   其内部是使用 java.text.SimpleDateFormat 来处理格式化的 3.  ...java.util.Calendar   作用:用于萃取日期时间中的年、月、日、时、分、秒等信息,至于格式化就有我们自己解决了。

    2.1K80

    oracle如何格式化日期,Oracle 日期格式化处理汇总

    一、 日期及时间格式化应用TO_CHAR(日期,格式化参数) 1、返回任意有效分割符拼接的年月日字符串 1.1、Select to_char(sysdate,'yyyy/mm/dd') From dual...2.1、日期换算为对应的世纪 cc/scc(S前缀指定如遇公元前的显示,会在显示前加(-) 提示: * 如果年份中最后两位数字在01到99(含)之间,则返回值等于年份前两位+1 * 如果年份中最后两位数字是...、MM返回指定日期的月份(01-12)、 am hh12/am hh24、Mi返回指定日期的分(00-59)、SS返回指定日期的秒(00-59)、SS返回指定日期的秒(00-59)、Y,YYY 返回有逗号分隔显示的年...2,015、 Y/YY/YYY 以指定长度返回日期的年份 2.7、Q 返回指定日期的季度(范围:1-4)、返回指定日期在当月中的第X周(范围:1-5)、WW 返回指定日期在当年中的第X周(范围:1-53...09′,’yyyy-mm-dd’),’w’)||’周’ from dual; ********************* 第2周 2.8、DL 根据数据中参数中的格式返回长日期形式、DS 与上相同返回短日期形式

    8.5K20
    领券