ฉันจะจัดรูปแบบการประทับเวลา java.sql ตามที่ฉันชอบได้อย่างไร (เป็นสตริงเพื่อการแสดงผล)
ฉันจะจัดรูปแบบการประทับเวลา java.sql ตามที่ฉันชอบได้อย่างไร (เป็นสตริงเพื่อการแสดงผล)
คำตอบ:
java.sql.Timestamp
java.util.Date
ขยาย คุณทำได้:
String s = new SimpleDateFormat("MM/dd/yyyy").format(myTimestamp);
หรือรวมเวลา:
String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);
ใช้ String.format (หรือjava.util.Formatter ):
Timestamp timestamp = ...
String.format("%1$TD %1$TT", timestamp)
แก้ไข:
โปรดดูเอกสารของ Formatter เพื่อทราบว่า TD และ TT หมายถึงอะไร: คลิกที่java.util.Formatter
ตัวแรก 'T' หมายถึง:
't', 'T' date/time Prefix for date and time conversion characters.
และอักขระที่ตามหลัง 'T':
'T' Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D' Date formatted as "%tm/%td/%ty".
05/30/17 00:39:18
ดังนี้
สำหรับคำถามนี้ข้อเสนอแนะมาตรฐานของjava.text.SimpleDateFormat
ผลงาน แต่มีผลข้างเคียงที่โชคร้ายซึ่งSimpleDateFormat
ไม่ปลอดภัยต่อเธรดและอาจเป็นที่มาของปัญหาที่น่ารังเกียจโดยเฉพาะอย่างยิ่งเนื่องจากจะทำให้ผลลัพธ์ของคุณเสียหายในสถานการณ์แบบมัลติเธรดและคุณจะไม่ ได้รับข้อยกเว้น!
ฉันขอแนะนำอย่างยิ่งให้ดูที่Jodaเพื่อหาอะไรทำนองนี้ ทำไม? เป็นไลบรารีเวลา / วันที่ที่สมบูรณ์ยิ่งขึ้นและใช้งานง่ายสำหรับ Java มากกว่าไลบรารีปัจจุบัน (และเป็นพื้นฐานของไลบรารีวันที่ / เวลา Java มาตรฐานใหม่ที่กำลังจะมาถึงดังนั้นคุณจะได้เรียนรู้เกี่ยวกับมาตรฐานในไม่ช้า API)
หากคุณใช้ MySQL และต้องการให้ฐานข้อมูลทำการแปลงให้ใช้สิ่งนี้:
หากคุณต้องการจัดรูปแบบโดยใช้ Java ให้ใช้สิ่งนี้:
SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
dateFormat.format( new Date() );
ใช้ไฟล์DateFormat
. getInstance
ในโปรแกรมประยุกต์สากลใช้รูปแบบที่ให้ของ หากคุณต้องการควบคุมรูปแบบอย่างชัดเจนให้สร้างใหม่SimpleDateFormat
ด้วยตัวคุณเอง
ฉันกำลังให้คำตอบที่ทันสมัย Timestamp
ชั้นสับด้านบนของที่มีอยู่แล้วออกแบบมาไม่ดีjava.util.Date
เรียนและล้าสมัยยาว แม้ว่าฉันสมมติว่าคุณได้รับTimestamp
API จากระบบเดิมที่คุณไม่สามารถอัพเกรดเป็น java.time ได้ในตอนนี้ เมื่อคุณทำเช่นนั้นให้แปลงเป็นแบบทันสมัยInstant
และประมวลผลเพิ่มเติมจากที่นั่น
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
.withLocale(Locale.GERMAN);
Timestamp oldfashionedTimestamp = new Timestamp(1_567_890_123_456L);
ZonedDateTime dateTime = oldfashionedTimestamp.toInstant()
.atZone(ZoneId.systemDefault());
String desiredFormat = dateTime.format(formatter);
System.out.println(desiredFormat);
ผลลัพธ์ในเขตเวลาของฉัน:
07.09.2019 23:02:03 น
เลือกวิธีการที่ยาวหรือสั้นของรูปแบบที่คุณต้องการโดยระบุFormatStyle.SHORT
, .MEDIUM
, หรือ.LONG
เลือกสถานที่ของคุณเองที่ผมใส่.FULL
และเลือกโซนเวลาที่คุณต้องการเช่นLocale.GERMAN
ZoneId.of("Europe/Oslo")
A Timestamp
คือจุดในเวลาที่ไม่มีเขตเวลาดังนั้นเราจึงต้องมีเขตเวลาเพื่อที่จะสามารถแปลงเป็นปีเดือนวันชั่วโมงนาที ฯลฯ หากคุณTimestamp
มาจากค่าฐานข้อมูลประเภทที่timestamp
ไม่มีเขตเวลา (โดยทั่วไปไม่ใช่ แนะนำ แต่น่าเสียดายที่มักจะเห็น) ZoneId.systemDefault()
มีแนวโน้มที่จะให้ผลลัพธ์ที่ถูกต้อง อีกทางเลือกหนึ่งและง่ายกว่าเล็กน้อยในกรณีนี้คือแทนที่จะแปลงเป็นการLocalDateTime
ใช้งานoldfashionedTimestamp.toLocalDateTime()
แล้วจัดรูปแบบLocalDateTime
ในลักษณะเดียวกับที่ฉันทำกับไฟล์ZonedDateTime
.
สตริง timeFrSSHStr = timeFrSSH.toString ();