ฉันต้องการแปลงString
เป็นDate
รูปแบบอื่น
ตัวอย่างเช่น,
ฉันได้รับจากผู้ใช้
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
ฉันต้องการแปลงสิ่งนี้fromDate
เป็นวัตถุวันที่ของ"yyyy-MM-dd"
รูปแบบ
ฉันจะทำเช่นนี้ได้อย่างไร?
ฉันต้องการแปลงString
เป็นDate
รูปแบบอื่น
ตัวอย่างเช่น,
ฉันได้รับจากผู้ใช้
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
ฉันต้องการแปลงสิ่งนี้fromDate
เป็นวัตถุวันที่ของ"yyyy-MM-dd"
รูปแบบ
ฉันจะทำเช่นนี้ได้อย่างไร?
คำตอบ:
ลองดูที่SimpleDateFormat
. รหัสมีลักษณะดังนี้:
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
e.printStackTrace();
}
Date
รูปแบบได้หรือไม่
parse
แยกวิเคราะห์สตริงเป็นวันที่ format
parse
parse
ให้ฉันdate format
เป็นFri Jan 06 00:01:00 EST 2012
แต่มันต้องการใน2012-01-06
รูปแบบวันที่
System.out.println(anyDateObject)
toString เริ่มต้น () Fri Jan 06 00:01:00 EST 2012
วิธีการที่เรียกว่าซึ่งได้รับการกล่าวว่าการพิมพ์ในรูปแบบที่เช่น คุณจำเป็นต้องลบล้างเพื่อให้เหมาะกับความต้องการของคุณ
java.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และ Java 9 โปรดดูที่การสอนโดยออราเคิล
LocalDate.parse(
"19/05/2009" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
คำตอบอื่น ๆ ที่มีjava.util.Date
, java.sql.Date
และSimpleDateFormat
จะล้าสมัยในขณะนี้
LocalDate
วิธีที่ทันสมัยที่จะทำวันที่เวลาคือการทำงานกับการเรียน java.time LocalDate
โดยเฉพาะ LocalDate
ชั้นหมายถึงค่าวันเท่านั้นโดยไม่ต้องเวลาของวันและไม่มีโซนเวลา
DateTimeFormatter
หากต้องการแยกวิเคราะห์หรือสร้างสตริงที่แสดงค่าวันที่ - เวลาให้ใช้DateTimeFormatter
คลาส
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );
อย่าเชื่อมวัตถุวันที่ - เวลาด้วยสตริงที่แสดงค่าของมัน วัตถุวันที่เวลามีไม่มีรูปแบบในขณะที่ String ไม่ ออบเจ็กต์วันที่และเวลาเช่นLocalDate
สามารถสร้าง String เพื่อแสดงค่าภายในได้ แต่อ็อบเจ็กต์วันที่และสตริงเป็นอ็อบเจ็กต์ที่แตกต่างกัน
คุณสามารถระบุรูปแบบที่กำหนดเองเพื่อสร้าง String หรือปล่อยให้ java.time ทำงานในการแปลโดยอัตโนมัติ
DateTimeFormatter f =
DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );
ถ่ายโอนไปยังคอนโซล
System.out.println( "ld: " + ld + " | output: " + output );
ld: 2009-05-19 | ผลผลิต: mardi 19 mai 2009
ดูในการดำเนินการใน IdeOne.com
java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date
, และCalendar
SimpleDateFormat
โครงการJoda-Timeขณะนี้อยู่ในโหมดการบำรุงรักษาแนะนำให้ย้ายไปที่คลาสjava.time
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310
คุณสามารถแลกเปลี่ยนวัตถุjava.timeโดยตรงกับฐานข้อมูลของคุณ ใช้ไดรเวอร์ JDBC ที่สอดคล้องกับJDBC 4.2หรือใหม่กว่า ไม่ต้องมีสตริงไม่ต้องมีjava.sql.*
คลาส
จะหาคลาส java.time ได้ที่ไหน?
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โปรเจ็กต์นี้เป็นพื้นที่พิสูจน์สำหรับการเพิ่ม java.time ในอนาคต คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย
ใช้SimpleDateFormat
คลาส:
private Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.parse(date);
}
การใช้งาน:
Date date = parseDate("19/05/2009", "dd/MM/yyyy");
เพื่อประสิทธิภาพคุณต้องการจัดเก็บรูปแบบของคุณในแฮชแมป แฮชแมปเป็นสมาชิกแบบคงที่ของคลาส util ของคุณ
private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();
public static Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = hashFormatters.get(format);
if (formatter == null)
{
formatter = new SimpleDateFormat(format);
hashFormatters.put(format, formatter);
}
return formatter.parse(date);
}
แปลงวันที่สตริงเป็น java.sql.Date
String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date dtt = df.parse(fromDate);
java.sql.Date ds = new java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
ตรวจสอบ javadocs สำหรับjava.text.SimpleDateFormat
มันอธิบายทุกสิ่งที่คุณต้องการ
แม้ว่าSimpleDateFormat
จะเหมาะกับความต้องการของคุณ แต่คุณอาจต้องการตรวจสอบJoda Timeซึ่งเห็นได้ชัดว่าเป็นพื้นฐานสำหรับไลบรารี Date ที่ทำซ้ำใน Java 7 แม้ว่าฉันจะไม่ได้ใช้มันมากนัก แต่ฉันก็ไม่ได้ยินอะไรเลยนอกจากสิ่งดีๆ เกี่ยวกับเรื่องนี้และหากวันที่ที่คุณจัดการอย่างกว้างขวางในโครงการของคุณก็น่าจะคุ้มค่า
สมมติว่าคุณมีสตริงดังนี้:
String mDate="2019-09-17T10:56:07.827088"
ตอนนี้เราต้องการที่จะเปลี่ยนแปลงนี้String
รูปแบบวันที่แยกต่างหากและเวลาในJavaและKotlin
Java:
เรามีวิธีการแยกวันที่ :
public String getDate() {
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
Date date = dateFormat.parse(mDate);
dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
return dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
Return
คือ: 17/09/2019
และเรามีวิธีการแยกเวลา :
public String getTime() {
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
Date date = dateFormat.parse(mCreatedAt);
dateFormat = new SimpleDateFormat("h:mm a", Locale.US);
return dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
Return
คือ: 10:56 น
คอตลิน:
เรามีฟังก์ชั่นสำหรับแยกวันที่ :
fun getDate(): String? {
var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
val date = dateFormat.parse(mDate!!)
dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.US)
return dateFormat.format(date!!)
}
Return
คือ: 17/09/2019
และเรามีวิธีการแยกเวลา :
fun getTime(): String {
var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
val time = dateFormat.parse(mDate!!)
dateFormat = SimpleDateFormat("h:mm a", Locale.US)
return dateFormat.format(time!!)
}
Return
คือ: 10:56 น
SimpleDateFormat
ชั้นเรียนที่ล้าสมัยและยุ่งยากมานาน อย่างน้อยก็ไม่ใช่ตัวเลือกแรก และไม่มีการจองใด ๆ วันนี้เรามีมากดีกว่าในการjava.time
ที่ทันสมัย Java วันที่และเวลา API,DateTimeFormatter
และ ยังSimpleDateFormat
ไม่สามารถแยกวิเคราะห์ทศนิยม 6 ตำแหน่งในวินาที (ไมโครวินาที) ได้อย่างถูกต้อง
10:56 AM
อย่างที่คุณบอก แต่ควรทำแทน11:09 AM
(ทดสอบบน Oracle jdk-11.0.3)
DateTimeFormatter
เราต้องการminsdk 26
หรือสูงกว่านั้นก็ไม่ใช่สิ่งที่ดี
10:56 AM
วิธีง่ายๆในการจัดรูปแบบวันที่และแปลงเป็นสตริง
Date date= new Date();
String dateStr=String.format("%td/%tm/%tY", date,date,date);
System.out.println("Date with format of dd/mm/dd: "+dateStr);
เอาต์พุต: วันที่ที่มีรูปแบบ dd / mm / dd: 21/10/2015
Date
วัตถุมีรูปแบบไม่มีมันเป็นตัวแทน วันที่สามารถนำเสนอด้วยString
กับรูปแบบที่คุณชอบ
เช่น " yyyy-MM-dd
", " yy-MMM-dd
", dd-MMM-yy
"และอื่น ๆ
เพื่อให้บรรลุสิ่งนี้คุณสามารถใช้ไฟล์ SimpleDateFormat
ลองสิ่งนี้
String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
System.out.println(dateMyFormat); // outputs : 2009-05-19
} catch (ParseException e) {
e.printStackTrace();
}
ผลลัพธ์นี้: 2009-05-19