Java中SimpleDateFormat方法超详细分析
作者:学编程的小程
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 2023
Thu Jan 01 09:00:00 CST 1970
2023年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); } }
效果
总结
到此这篇关于Java中SimpleDateFormat方法超详细分析的文章就介绍到这了,更多相关Java SimpleDateFormat方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!