Java中SimpleDateFormat方法超詳細(xì)分析
SimpleDateFormat方法
在Java中,SimpleDateFormat類是用于日期格式化和解析的類。它位于java.text包中。
分析
SimpleDateFormat SimpleDateFormat是一個用于區(qū)域設(shè)置敏感的方式格式化和解析日期的具體類日期和時間格式由日期和時間模式字符串指定,在日期和時間模式字符串中,從’A’到’Z’以及從‘a’到’z’引號中的字母被解釋為表示日期或時間字符串的組成部分的模式字母常用模式字母 y 年 M 月 d 日 H 時 m 分 s 秒舉例 2021年10月27日11:11:11模式 yyyy年MM月dd日HH:mm:ss
常用方法
構(gòu)造方法
SimpleDateFormat():構(gòu)造一個SimpleDateFormat,使用默認(rèn)模式和日期 SimpleDateFormat(String pattern): 構(gòu)造一個SimpleDateFormat使用給定的模式和默認(rèn)的日期格式
格式化(從Date到String)
String format(Date date):將日期格式化成日期/時間字符串
舉例
Date now = new Date(); String formattedDate = sdf.format(now); System.out.println(formattedDate);
分析
我們使用format()方法將當(dāng)前日期和時間對象格式化為一個字符串,并將其打印到控制臺上。
解析(從String到Date)
Date parse(String source):從給定字符串的開始解析文本以生成日期
舉例
String dateStr = "2022-01-01 12:00:00"; Date parsedDate = sdf.parse(dateStr); System.out.println(parsedDate);
分析
使用parse()方法將一個字符串解析為一個日期對象,并將其打印到控制臺上。
設(shè)置方法:
void setLenient(boolean lenient):設(shè)置解析時是否寬松的解析日期,默認(rèn)為true,即寬松解析,對于一些不合法的日期也會嘗試解析。void setDateFormatSymbols(DateFormatSymbols newFormatSymbols):設(shè)置用于格式化和解析日期的DateFormatSymbols對象,用于指定月份、星期幾等的名稱。
注意
SimpleDateFormat不是線程安全的。如果多個線程同時使用同一個SimpleDateFormat對象,可能會導(dǎo)致結(jié)果不正確。為了解決這個問題,我們可以使用ThreadLocal來確保每個線程都有自己的SimpleDateFormat對象。
是SimpleDateFormat對于日期格式的解析是寬松的。這意味著它會嘗試解析不完整或不正確的日期字符串,并返回一個可能不準(zhǔn)確的日期對象。為了避免這種情況,我們應(yīng)該始終使用嚴(yán)格的日期格式,并在解析之前對日期字符串進(jì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 一小時
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);
//開始時間
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);
//結(jié)束時間
JLabel endDateLable = new JLabel("結(jié)束時間");
endDateLable.setBounds(250, 70, 100, 20);
jf.add(endDateLable);
//結(jié)束時間輸入框
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é)束時間
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot使用RestTemplate如何通過http請求將文件下載到本地
文章介紹了如何通過編寫代碼批量下載文件,解決了沒有提供批量下載接口的問題,首先篩選出需要下載的文件ID,然后通過后端代碼發(fā)起HTTP請求,將下載的資源寫入本地文件中,總結(jié)了實(shí)現(xiàn)方式和注意事項,希望能為類似任務(wù)提供參考2025-02-02
java使用udp實(shí)現(xiàn)簡單多人聊天功能
這篇文章主要為大家詳細(xì)介紹了java使用udp實(shí)現(xiàn)簡單多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
SpringBoot整合Mybatis實(shí)現(xiàn)高德地圖定位并將數(shù)據(jù)存入數(shù)據(jù)庫的步驟詳解
這篇文章主要介紹了SpringBoot整合Mybatis實(shí)現(xiàn)高德地圖定位并將數(shù)據(jù)存入數(shù)據(jù)庫的步驟詳解,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Java基礎(chǔ)之JDBC的數(shù)據(jù)庫連接與基本操作
這篇文章主要介紹了Java基礎(chǔ)之JDBC的數(shù)據(jù)庫連接與基本操作,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們也有很好的幫助,需要的朋友可以參考下2021-05-05
Spring中@ExceptionHandler注解的工作原理詳解
這篇文章主要介紹了Spring中@ExceptionHandler注解的工作原理詳解,Spring Web注解@ExceptionHandler可以用來指定處理某類異常的控制器方法,從而在這些異常發(fā)生時,會有相應(yīng)的控制器方法來處理此類異常,需要的朋友可以參考下2024-01-01

