java时间处理SimpleDateFormat详解

文章目录

SimpleDateFormat 是 Java 中用于日期和时间格式化的类,属于 java.text 包。它允许开发者将日期对象格式化为字符串,或者将字符串解析为日期对象。它功能强大并支持自定义日期和时间格式。


常用构造函数

  1. SimpleDateFormat(String pattern)

    • 使用指定的模式创建一个格式化对象。
    • 例如:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  2. SimpleDateFormat(String pattern, Locale locale)

    • 使用指定的模式和区域设置创建一个格式化对象。
    • 例如:new SimpleDateFormat("yyyy-MM-dd", Locale.US)

日期格式模式

字符 描述 示例
y yyyy -> 2024
M MM -> 12
d dd -> 06
H 小时(24小时制) HH -> 14
h 小时(12小时制) hh -> 02
m 分钟 mm -> 30
s ss -> 45
S 毫秒 SSS -> 123
E 星期几 E -> Tue
a 上午/下午标识 a -> PM
z 时区 z -> CST

常见用法

1. 格式化日期
java 复制代码
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);
    }
}

输出:

复制代码
当前时间: 2024-12-06 14:30:45
2. 解析日期字符串
java 复制代码
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        String dateStr = "2024-12-06 14:30:45";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = sdf.parse(dateStr); // 将字符串解析为日期对象
            System.out.println("解析后的日期: " + date);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出:

复制代码
解析后的日期: Fri Dec 06 14:30:45 CST 2024

注意事项

  1. 线程安全性
    SimpleDateFormat 不是线程安全的。在多线程环境中使用时,应通过以下方式避免线程安全问题:

    • 使用 ThreadLocal
    • 使用 java.time 包中的类(如 DateTimeFormatter),它是线程安全的。
  2. 格式字符串错误

    如果格式化或解析时的模式与实际日期字符串不匹配,会抛出 ParseException

  3. 替代方案

    自 Java 8 起,可以使用 java.time.format.DateTimeFormatter 来替代 SimpleDateFormat,它更安全、功能更强大。


示例扩展:指定区域和时区

java 复制代码
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT")); // 设置时区为 GMT
        System.out.println("当前时间(GMT): " + sdf.format(now));
    }
}

输出:

复制代码
当前时间(GMT): 2024-12-06 06:30:45 GMT

结束语

Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

相关推荐
tanzongbiao3 小时前
Dorado7文件上传 解决HttpServletResponse返回值中文乱码的问题
java·服务器·前端
茶本无香4 小时前
Arthas 实战:线上“看 Map”的四种武器
java·map·arthas·线上定位
霸道流氓气质5 小时前
Spring AI异常处理与重试机制
java·人工智能·spring
郑州光合科技余经理7 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
萧瑟余晖7 小时前
Java深入解析篇三十三之密封类与接口(Sealed Classes)详解
java·开发语言
论迹复利11 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
张宇Joaquin11 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
宸津-代码粉碎机12 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
2601_9637491013 小时前
越华环保集团数字化污水治理:端边云采集架构与平台对接实现
java·大数据·架构
xcLeigh13 小时前
Go入门:整数类型的溢出与安全边界
java·安全·golang