(Java中Simpledateformat方法分析)
先介绍专栏本专栏是学习Java的旅程,纯手敲代码,学习黑马课程,添加一些自己的理解,适当修改代码和笔记。我希望它能帮助你,但也请监督我,建议我写的代码,互相学习。
Simpledateformat方法SimpleDateFormat类是Java中用于日期格式化和分析的类别。它位于java.在text包里。
分析SimpleDateFormat SimpleDateFormat是一种特定类别的日期和时间格式,用于区域设置敏感的格式化和分析日期,由日期和时间模式字符串指定,在日期和时间模式字符串中,从'A'到’Z'以及从‘a'到’z引号中的字母被解释为表示日期或时间字符串的组成部分的模式字母 y 年 M 月 d 日 H 时 m 分 s 秒举例 2021年10月27日11:11:11模式 yyyyyyyyy年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): *60*6000(毫秒) 一小时 Date d2 = new Date(1000 * 60 * 60); System.out.println(d2); Date d = new Date();// SimpleDateFormat sdf = new SimpleDateFormat(); SimpleDateFormat sdf=new SimpleDateFormat("yyyyyyyyy年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 datechoser = DateChooser.getInstance("yyyy/MM/dd"); DateChooser datechoser2 = DateChooser.getInstance("yyyy/MM/dd"); //开始时间输入框 JTextField startDateField = new JTextField(); startDateField.setBounds(50, 100, 100, 20); datechoser.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); datechoser2.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); }}
效果