Java中SimpleDateFormat方法超詳細(xì)分析
SimpleDateFormat方法
在Java中,SimpleDateFormat類是用于日期格式化和解析的類。它位于java.text包中。
分析
SimpleDateFormat SimpleDateFormat是一個(gè)用于區(qū)域設(shè)置敏感的方式格式化和解析日期的具體類日期和時(shí)間格式由日期和時(shí)間模式字符串指定,在日期和時(shí)間模式字符串中,從’A’到’Z’以及從‘a’到’z’引號(hào)中的字母被解釋為表示日期或時(shí)間字符串的組成部分的模式字母常用模式字母 y 年 M 月 d 日 H 時(shí) m 分 s 秒舉例 2021年10月27日11:11:11模式 yyyy年MM月dd日HH:mm:ss
常用方法
構(gòu)造方法
SimpleDateFormat():構(gòu)造一個(gè)SimpleDateFormat,使用默認(rèn)模式和日期 SimpleDateFormat(String pattern): 構(gòu)造一個(gè)SimpleDateFormat使用給定的模式和默認(rèn)的日期格式
格式化(從Date到String)
String format(Date date):將日期格式化成日期/時(shí)間字符串
舉例
Date now = new Date(); String formattedDate = sdf.format(now); System.out.println(formattedDate);
分析
我們使用format()方法將當(dāng)前日期和時(shí)間對(duì)象格式化為一個(gè)字符串,并將其打印到控制臺(tái)上。
解析(從String到Date)
Date parse(String source):從給定字符串的開始解析文本以生成日期
舉例
String dateStr = "2022-01-01 12:00:00"; Date parsedDate = sdf.parse(dateStr); System.out.println(parsedDate);
分析
使用parse()方法將一個(gè)字符串解析為一個(gè)日期對(duì)象,并將其打印到控制臺(tái)上。
設(shè)置方法:
void setLenient(boolean lenient):設(shè)置解析時(shí)是否寬松的解析日期,默認(rèn)為true,即寬松解析,對(duì)于一些不合法的日期也會(huì)嘗試解析。void setDateFormatSymbols(DateFormatSymbols newFormatSymbols):設(shè)置用于格式化和解析日期的DateFormatSymbols對(duì)象,用于指定月份、星期幾等的名稱。
注意
SimpleDateFormat不是線程安全的。如果多個(gè)線程同時(shí)使用同一個(gè)SimpleDateFormat對(duì)象,可能會(huì)導(dǎo)致結(jié)果不正確。為了解決這個(gè)問題,我們可以使用ThreadLocal來確保每個(gè)線程都有自己的SimpleDateFormat對(duì)象。
是SimpleDateFormat對(duì)于日期格式的解析是寬松的。這意味著它會(huì)嘗試解析不完整或不正確的日期字符串,并返回一個(gè)可能不準(zhǔn)確的日期對(duì)象。為了避免這種情況,我們應(yīng)該始終使用嚴(yán)格的日期格式,并在解析之前對(duì)日期字符串進(jìn)行驗(yàn)證。
代碼示例
代碼
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 一小時(shí) 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); } }
結(jié)果
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); //開始時(shí)間 JLabel startDateLable = new JLabel("開始時(shí)間"); startDateLable.setBounds(50, 70, 100, 20); jf.add(startDateLable); DateChooser dateChooser1 = DateChooser.getInstance("yyyy/MM/dd"); DateChooser dateChooser2 = DateChooser.getInstance("yyyy/MM/dd"); //開始時(shí)間輸入框 JTextField startDateField = new JTextField(); startDateField.setBounds(50, 100, 100, 20); dateChooser1.register(startDateField); jf.add(startDateField); //結(jié)束時(shí)間 JLabel endDateLable = new JLabel("結(jié)束時(shí)間"); endDateLable.setBounds(250, 70, 100, 20); jf.add(endDateLable); //結(jié)束時(shí)間輸入框 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"); //獲取開始 結(jié)束時(shí)間 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); } }
效果
總結(jié)
到此這篇關(guān)于Java中SimpleDateFormat方法超詳細(xì)分析的文章就介紹到這了,更多相關(guān)Java SimpleDateFormat方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot常用注解@RestControllerAdvice詳解
這篇文章主要介紹了SpringBoot常用注解@RestControllerAdvice詳解,@RestControllerAdvice是一個(gè)組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,因此@RestControllerAdvice本質(zhì)上是個(gè)Component,需要的朋友可以參考下2024-01-01mybatis中insert主鍵ID獲取和多參數(shù)傳遞的示例代碼
這篇文章主要介紹了mybatis中insert主鍵ID獲取和多參數(shù)傳遞的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03SpringData如何通過@Query注解支持JPA語句和原生SQL語句
這篇文章主要介紹了SpringData如何通過@Query注解支持JPA語句和原生SQL語句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11完美解決Logback configuration error detected的問題
這篇文章主要介紹了完美解決Logback configuration error detected的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java?8函數(shù)式接口之Consumer用法示例詳解
這篇文章主要為大家介紹了Java?8函數(shù)式接口之Consumer用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07SpringBoot上傳文件并配置本地資源映射來訪問文件的實(shí)例代碼
這篇文章主要介紹了SpringBoot上傳文件并配置本地資源映射來訪問文件的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用
這篇文章主要為大家介紹了分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Spring Boot實(shí)現(xiàn)圖片上傳功能
這篇文章主要為大家詳細(xì)介紹了Spring Boot實(shí)現(xiàn)圖片上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05