文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中的SimpleDateFormat方法分析

2023-08-16 22:02

关注

先进行专栏介绍

本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记
进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。
在这里插入图片描述

SimpleDateFormat方法

在Java中,SimpleDateFormat类是用于日期格式化和解析的类。它位于java.text包中。

分析

SimpleDateFormat SimpleDateFormat是一个用于区域设置敏感的方式格式化和解析日期的具体类
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,
从’A’到’Z’以及从‘a’到’z’引号中的字母被解释为表示日期或时间字符串的组成部分的模式字母
常用模式字母 y 年 M 月 d 日 H 时 m 分 s 秒
举例 2021年10月27日11:11:11
模式 yyyy年MM月dd日HH:mm:ss
在这里插入图片描述

常用方法

构造方法

SimpleDateFormat():构造一个SimpleDateFormat,使用默认模式和日期 SimpleDateFormat(String pattern): 构造一个SimpleDateFormat使用给定的模式和默认的日期格式

格式化(从Date到String)

String format(Date date):将日期格式化成日期/时间字符串

举例

Date now = new Date();String formattedDate = sdf.format(now);System.out.println(formattedDate);

分析

我们使用format()方法将当前日期和时间对象格式化为一个字符串,并将其打印到控制台上。

解析(从String到Date)

Date parse(String source):从给定字符串的开始解析文本以生成日期

举例

String dateStr = "2022-01-01 12:00:00";Date parsedDate = sdf.parse(dateStr);System.out.println(parsedDate);

分析

使用parse()方法将一个字符串解析为一个日期对象,并将其打印到控制台上。

设置方法:

void setLenient(boolean lenient):设置解析时是否宽松的解析日期,默认为true,即宽松解析,对于一些不合法的日期也会尝试解析。
void setDateFormatSymbols(DateFormatSymbols newFormatSymbols):设置用于格式化和解析日期的DateFormatSymbols对象,用于指定月份、星期几等的名称。

在这里插入图片描述

注意

SimpleDateFormat不是线程安全的。如果多个线程同时使用同一个SimpleDateFormat对象,可能会导致结果不正确。为了解决这个问题,我们可以使用ThreadLocal来确保每个线程都有自己的SimpleDateFormat对象。

是SimpleDateFormat对于日期格式的解析是宽松的。这意味着它会尝试解析不完整或不正确的日期字符串,并返回一个可能不准确的日期对象。为了避免这种情况,我们应该始终使用严格的日期格式,并在解析之前对日期字符串进行验证。

代码示例

代码

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class crj {    public static void main(String[] args) {        //Date():        Date d1 = new Date();        System.out.println(d1);        //Date(long date):  1000(毫秒)*60*60   一小时        Date d2 = new Date(1000 * 60 * 60);        System.out.println(d2);        Date d = new Date();//        SimpleDateFormat sdf = new SimpleDateFormat();        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");        String s = sdf.format(d);        System.out.println(s);        System.out.println("-------");        //解析        String ss="2021-10-27 11:11:11";//        SimpleDateFormat sdf2=new SimpleDateFormat("2021年10月27日 11:11:11");        SimpleDateFormat sdf2=new SimpleDateFormat("2021-10-27 11:11:11");        Date dd= null;        try {            dd = sdf2.parse(ss);        } catch (ParseException e) {            e.printStackTrace();        }        System.out.println(dd);    }}

结果

Wed Aug 09 07:47:56 CST 2023Thu Jan 01 09:00:00 CST 19702023年08月09日 07:47:56-------Thu Jan 01 00:00:00 CST 1970

在这里插入图片描述

综合案例

import com.itheima_05.DateChooser;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class crj {    public static void main(String[] args) {        JFrame jf = new JFrame();        jf.setTitle("考勤查询");        jf.setSize(400, 300);        jf.setDefaultCloseOperation(3);        jf.setLocationRelativeTo(null);        jf.setAlwaysOnTop(true);        jf.setLayout(null);        //显示考勤日期        JLabel dataLable = new JLabel("考勤日期");        dataLable.setBounds(50, 20, 100, 20);        jf.add(dataLable);        //开始时间        JLabel startDateLable = new JLabel("开始时间");        startDateLable.setBounds(50, 70, 100, 20);        jf.add(startDateLable);        DateChooser dateChooser1 = DateChooser.getInstance("yyyy/MM/dd");        DateChooser dateChooser2 = DateChooser.getInstance("yyyy/MM/dd");        //开始时间输入框        JTextField startDateField = new JTextField();        startDateField.setBounds(50, 100, 100, 20);        dateChooser1.register(startDateField);        jf.add(startDateField);        //结束时间        JLabel endDateLable = new JLabel("结束时间");        endDateLable.setBounds(250, 70, 100, 20);        jf.add(endDateLable);        //结束时间输入框        JTextField endDateField = new JTextField();        endDateField.setBounds(250, 100, 100, 20);        dateChooser2.register(endDateField);        jf.add(endDateField);        //确定按钮        JButton confirmButton = new JButton("确定");        confirmButton.setBounds(250, 180, 60, 20);        jf.add(confirmButton);        confirmButton.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");                //获取开始 结束时间                String startDateString = startDateField.getText();                String endDateString = endDateField.getText();                try {                    Date startDate = sdf.parse(startDateString);                    Date endDate = sdf.parse(endDateString);                    JOptionPane.showMessageDialog(jf,startDate+"\n"+endDate);                } catch (ParseException ex) {                    ex.printStackTrace();                }            }        });        jf.setVisible(true);    }}

效果

在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_74888502/article/details/132179694

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯