SimpleDateFormat用法详解

2023-11-10

SimpleDateFormat类是一个以语言环境敏感的方式来格式化和解析日期的工具类。它允许你将日期格式化为字符串,或从字符串解析为日期。
格式化日期为字符串:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = sdf.format(new Date());
System.out.println(dateString);
// 2020-10-21 10:15:30

解析字符串为日期:

String dateString = "2020-10-21 10:15:30";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dateString); 
System.out.println(date);
// Wed Oct 21 10:15:30 CST 2020

SimpleDateFormat支持的日期时间模式字母有:

  • y:年,可以显示2位或4位
  • M:月
  • d:日
  • H:时 在一天中的小时数(0-23)
  • h:时 在一天中的小时数(1-12)
  • m:分
  • s:秒
    所以可以定义多种格式,如:
  • yyyy-MM-dd:2020-10-21
  • yy-M-d h:mm a:20-10-21 10:15 上午
  • EEE, MMM d, ''yy:Wed, Oct 21, '20
    SimpleDateFormat不是线程安全的,如果在多线程环境下使用,可以使用ThreadLocal封装SimpleDateFormat:
public class DateUtil {
    private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
    };

    public static String formatDate(Date date) {
        return threadLocal.get().format(date);
    }
} 

通过ThreadLocal,每个线程会有自己独立的SimpleDateFormat对象,这样多个线程 Format 时间时就不会出现线程安全问题。
SimpleDateFormat是一个功能强大且常用的日期格式化和解析工具类。通过对其格式化模式字母的理解和掌握,可以实现多种日期格式化,并在多线程环境下注意其线程安全问题。希望通过这篇博客,可以加深您对SimpleDateFormat的认知和理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimpleDateFormat用法详解 的相关文章

  • 在 Java 中捕获(捕获)窗口中的鼠标光标

    我正在寻找一种方法 在鼠标进入窗口后捕获或捕获该窗口中的鼠标 就像鼠标被捕获在虚拟机窗口中一样 直到用户按 CTRL ALT DEL 或以其他方式释放鼠标 我如何在 Java 中实现这一点 全屏显示不是一个选择 EDIT 这里有一些 SSC
  • Java Swing BoxLayout 忽略 AlignmentX

    在下面的代码中 通过调用setAlignmentX with Component LEFT ALIGNMENT我希望在居中的滑块上获得左对齐的标签 由于某种原因 标签也居中 似乎与传递给 setAlignmentX 的值无关 我必须向 se
  • Android:java.lang.OutOfMemoryError:

    我在 Android 上开发了一个使用大量图像的应用程序 可绘制文件夹中有很多图像 比如说超过 100 张 我正在开发图像动画应用程序 我使用 imageview 来显示 GIF 图像 我使用了将 gif 图像分割成多个 PNG 格式图像的
  • Java,顺序流在哪个线程中执行?

    在阅读有关流的文档时 我遇到了以下句子 attempting to access mutable state from behavioral parameters presents you with a bad choice if you
  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • 如何准确判断 double 是否为整数? [复制]

    这个问题在这里已经有答案了 具体来说 在 Java 中 我如何确定double是一个整数 为了澄清 我想知道如何确定 double 实际上不包含任何分数或小数 我主要关心的是浮点数的性质 我想到的方法 以及我通过谷歌找到的方法 基本上遵循以
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 为什么通过 方法向 List 添加元素(类型正确)会出现编译错误? [复制]

    这个问题在这里已经有答案了 我对泛型通配符概念几乎没有疑问 1 假设我有一个方法 void write List
  • Maven WebApp META-INF context.xml

    我正在使用 Maven 3 并且尝试在 webapp 文件夹下添加 META INF 文件夹 所以我正在尝试执行以下操作 src main webapp META INF context xml WEB INF 下面是我的 POM 文件
  • 使用 Jena 查询维基数据

    目前 Wikidata 有一个 SPARQL 端点 https query wikidata org https query wikidata org 我想使用 Jena 3 0 1 查询此网站 我使用以下代码 但收到错误消息 端点返回的
  • 绘制平滑曲线

    我想创建更平滑的曲线 而不仅仅是线角 这是我现在画的图 这是我的代码 case FREEHAND float pts float ptk ptk new float 2 imageMatrix invert inv if mCurrentS
  • 但是创建静态实用方法不应该被过度使用吗?如何避免呢? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着时间的推移 java项目中引入了许多实用方法来完成更复杂和简单的任务 当使用静态方法时 我们在代码中引入了紧密耦合 这使得我们的代
  • 如何在Netbeans中设置JList的ListModel?

    我在 Netbeans IDE 的帮助下设计了一个 Swing GUI 该 GUI 包含一个 JList 默认情况下 它使用 QAbstractListModel 将其作为 JList 构造函数中的参数传递以创建该 JList 我想在 Ne
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 错误膨胀类 android.support.design.widget.NavigationView [启动时崩溃]

    该应用程序应该有一个导航抽屉 可以从左侧拉出并显示各种活动 但是一旦将导航栏添加到 XML Activity homescreen 文档中 应用程序一启动就会崩溃 主屏幕 java package com t99sdevelopment c
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 为什么 java.util.Arraylist#clear 按照 OpenJDK 中的方式实现?

    http grepcode com file repository grepcode com java root jdk openjdk 6 b14 java util ArrayList java 473 http grepcode co
  • java Web应用程序中的日期转换

    String date1 13 03 2014 16 56 46 AEDT SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm ss z sdf setTimeZone Ti
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset

随机推荐

  • cesium的clock开始,结束,控制速率

    开始 viewer clock shouldAnimate true 结束 window viewer clock shouldAnimate false 速率调整 viewer clock multiplier 8
  • 图像二值化分割阈值的算法——OTSU

    该算法叫做大津算法 由日本学者大津于1979年提出 该算法的核心在于 前景与背景图像的类间方差最大 MATLAB代码 clear all clc I imread 1 jpg I rgb2gray I T level graythresh
  • 手把手教你使用Python做数据分析

    以下是使用Python进行数据分析的一般步骤 1 数据获取 首先 需要获取要分析的数据 数据可以从多个来源获取 如数据库 CSV文件 API等 Python中有很多库可以帮助我们进行数据获取和处理 如pandas numpy request
  • CV应用场景

    图像分类 已经成熟 目标检测 需调研具体场景 3D目标检测 暂无场景部署 视频目标检测属 目标跟踪 分割 语义分割 实例分割 全景分割 视频目标分割 超像素分割 具体应用场景 车道线检测 压缩与NAS NAS 模型压缩 剪枝 量化 蒸馏 G
  • TortoiseGit 入门指南03:将修改提交到版本库

    你现在应该已经有了一个仓库 在工作过程中会对项目做一些修改 比如添加代码 修复错误等等 你将不定时的将这些更改 提交 commit 到代码仓库 术语 提交 是将 暂存区 内容放入 版本库 这个过程涉及到 Git 的一些基本概念 需要在这里说
  • LeetCode-169-多数元素-简单(排序/摩尔投票法/哈希表/随机数/位运算)

    一 题目 给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数 大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 二 示例及提示 示例 1 输入 3 2 3 输出 3 示例 2 输入 2
  • 根据地理信息获取经纬度

    同步坐标 function synchronizationCoordinate var url http maps google com maps api geocode json address encodeURIComponent va
  • Linux vfs各种operation操作介绍

    1 ext4文件系统定义的各种操作 普通文件操作 const struct file operations ext4 file operations llseek ext4 llseek read iter generic file rea
  • MySQL——修改root密码的几种方法

    方法1 用SET PASSWORD命令 首先登录MySQL 格式 mysql gt set password for 用户名 localhost password 新密码 例子 mysql gt set password for root
  • C++ Primer Plus 第二章编程练习

    整理了我自己编写的课后题答案 如果有问题或者看不懂的欢迎大家留言 小声说 所有内容纯手打 点个赞再走呗 第二章编程练习题 Practice 1 Practice 2 Practice 3 Practice 4 Practice 5 Prac
  • mysql忘记密码及ssh连接

    mysql忘记密码 我们在安装mysql或者其他的时候会遇到忘记密码的时候 这时候就需要对密码进行重置 话不多说 直接上步骤 1 停止当前mysql服务 service mysqld stop 2 然后通过跳过权限验证启动mysql服务 m
  • 2008年7月51CTO.com十大热点文章排行榜

    刚刚过去的7月 热点新闻和精彩的技术文章还是不少的 以下是51CTO com各主要频道的精彩实用文章及简介 经典实用文章推荐 组网频道7月热点 网管人员必备的常用命令 Windows环境下有很多通过命令实现网络管理的非常有效的工具 可惜知道
  • 11-5 读写一行字符

    1 读一行字符 gets 与 gets s 都可以用做读取用户控制台输入的一行字符 gets 仅接收一个参数 char 意为读取到换行符时将读取内容全部保存到 char 中 该函数的问题在于无法判断出读取到换行符之前共有多少字符 故 cha
  • 在Repeater控件中创建可隐藏区(原作)

    在Repeater控件中创建可隐藏区 原作 最新的一篇作品 发表在天极网上 http dev yesky com SoftChannel 72342371945218048 20041227 1893718 shtml
  • Nginx 增加二级目录的反向代理时,最常见的两个问题

    当我们想在某个Nginx网站中增加一个两级目录 当然也可以是很多级 作为反向代理时 如果使用常见的单个Nginx反向代理配置的方法 非常容易遇到配置有问题的情况 主要由如下两个问题造成 1 因为不是独立配置反向代理 所以Nginx Conf
  • 数学建模论文常用LaTeX代码(2021美赛)

    数学建模论文常用LaTeX代码 图片 单图 begin figure htbp centering includegraphics width 9 textwidth XXX pdf 图片相对位置 caption xxx 图片标题 labe
  • Ts学习笔记

    any 任何类型都可以赋值给any any也可以给任何类型赋值 unknown 任何类型可以赋值给 unknown 但是 unknown 类型赋值给其它类型需要对其进行类型缩小 type 类型一般都是大写字母开头 type Fish nam
  • 敏捷开发知识体系笔记

    敏捷开发知识体系整体框架 敏捷开发工程实践 项目管理 迭代开发 风险价值生命周期 多级项目规划 完整团队 每日站立会议 任务板 燃尽图 需求管理 需求订单 业务流程草图 用例驱动开发 用户故事 架构 演进的架构 演进的设计 基于组件的架构设
  • 同步服务器安装系统,时间同步服务器的配置方法

    知道什么是时间同步服务器的配置方法吗 下面是学习啦小编跟大家分享的是时间同步服务器的配置方法 欢迎大家来阅读学习 时间同步服务器的配置方法 方法 步骤 双击任务栏右下角 时间 打开 时间和日期 属性 设置对话框 2选择 Internet时间
  • SimpleDateFormat用法详解

    SimpleDateFormat类是一个以语言环境敏感的方式来格式化和解析日期的工具类 它允许你将日期格式化为字符串 或从字符串解析为日期 格式化日期为字符串 SimpleDateFormat sdf new SimpleDateForma