tl; dr
Java 9 ขึ้นไป: ความละเอียดสูงสุดระดับนาโนวินาทีเมื่อจับภาพช่วงเวลาปัจจุบัน นั่นคือเศษทศนิยม 9 หลัก
Instant.now()
2017-12-23T12: 34: 56.123456789Z
เพื่อ จำกัด การmicroseconds , ตัด
Instant // Represent a moment in UTC.
.now() // Capture the current moment. Returns a `Instant` object.
.truncatedTo( // Lop off the finer part of this moment.
ChronoUnit.MICROS // Granularity to which we are truncating.
) // Returns another `Instant` object rather than changing the original, per the immutable objects pattern.
2017-12-23T12: 34: 56.123456Z
ในทางปฏิบัติคุณจะเห็น microseconds เพียงจับด้วย.now
เป็นร่วมสมัยนาฬิกาฮาร์ดแวร์คอมพิวเตอร์ทั่วไปไม่ถูกต้องในนาโนวินาที
รายละเอียด
คำตอบอื่น ๆ ค่อนข้างล้าสมัยใน Java 8
java.time
Java 8 และใหม่กว่ามาพร้อมกับกรอบjava.time คลาสใหม่เหล่านี้แทนที่คลาสวันเวลาที่มีปัญหาซึ่งมาพร้อมกับ Java เวอร์ชันแรกสุดเช่น java.util.Date/.Calendar และ java.text.SimpleDateFormat เฟรมเวิร์กถูกกำหนดโดย JSR 310 ซึ่งได้รับแรงบันดาลใจจากJoda-Timeซึ่งขยายโดยโครงการ ThreeTen-Extra
คลาสใน java.time แก้ไขเป็นนาโนวินาทีซึ่งละเอียดกว่ามิลลิวินาทีที่ทั้งคลาสวันที่และเวลาเก่าใช้และโดย Joda-Time และละเอียดกว่าไมโครวินาทีที่ถามในคำถาม
Clock
การนำไปใช้
แม้ว่าคลาส java.time จะรองรับข้อมูลที่แสดงค่าเป็นนาโนวินาที แต่คลาสยังไม่สร้างค่าเป็นนาโนวินาที วิธีการใช้การดำเนินงานนาฬิกาเดิมเป็นชั้นเรียนวันเวลาเก่าnow()
System.currentTimeMillis()
เรามีClock
อินเทอร์เฟซใหม่ใน java.time แต่การใช้งานสำหรับอินเทอร์เฟซนั้นเป็นนาฬิกามิลลิวินาทีแบบเดิม
ดังนั้นคุณสามารถจัดรูปแบบการแสดงผลลัพธ์ของผลลัพธ์ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
เพื่อดูตัวเลขเก้าหลักของเศษส่วนวินาที แต่มีเพียงสามหลักแรกเท่านั้นที่มีตัวเลขดังนี้:
2017-12-23T12:34:56.789000000Z
นาฬิกาใหม่ใน Java 9
การใช้งาน OpenJDK และ Oracle ของ Java 9 มีการClock
ใช้งานเริ่มต้นใหม่ที่มีความละเอียดละเอียดมากขึ้นจนถึงระดับนาโนวินาทีเต็มของคลาส java.time
ดูปัญหา OpenJDK, เพิ่มความแม่นยำของการดำเนินการ java.time.Clock.systemUTC ที่ () ปัญหานั้นได้รับการดำเนินการเรียบร้อยแล้ว
2017-12-23T12:34:56.123456789Z
ใน MacBook Pro (Retina 15 นิ้วปลายปี 2013) ที่มี macOS Sierra ฉันได้รับช่วงเวลาปัจจุบันเป็นหน่วยไมโครวินาที (เศษทศนิยมไม่เกินหกหลัก)
2017-12-23T12:34:56.123456Z
นาฬิกาฮาร์ดแวร์
โปรดจำไว้ว่าแม้จะมีการClock
ใช้งานที่ละเอียดกว่าแต่ผลลัพธ์ของคุณอาจแตกต่างกันไปตามคอมพิวเตอร์ Java ขึ้นอยู่กับนาฬิกาของฮาร์ดแวร์คอมพิวเตอร์พื้นฐานเพื่อให้ทราบช่วงเวลาปัจจุบัน
- ความละเอียดของนาฬิกาฮาร์ดแวร์ที่แตกต่างกัน ตัวอย่างเช่นหากนาฬิกาฮาร์ดแวร์ของคอมพิวเตอร์เครื่องใดเครื่องหนึ่งรองรับเฉพาะความละเอียดระดับไมโครวินาทีค่าวันที่ - เวลาใด ๆ ที่สร้างขึ้นจะมีเศษส่วนของวินาทีเพียงหกหลักโดยตัวเลขสามหลักสุดท้ายเป็นเลขศูนย์
- ความถูกต้องของนาฬิกาฮาร์ดแวร์ที่แตกต่างกัน เพียงเพราะนาฬิกาปลุกสร้างค่ากับหลายส่วนของตัวเลขทศนิยมของสองตัวเลขเหล่านั้นอาจจะไม่ถูกต้องเพียงประมาณ, ลอยจากเวลาที่เกิดขึ้นจริงเป็นอาจจะอ่านจากนาฬิกาอะตอม กล่าวอีกนัยหนึ่งเพียงเพราะคุณเห็นตัวเลขจำนวนมากทางด้านขวาของเครื่องหมายทศนิยมไม่ได้หมายความว่าคุณสามารถเชื่อถือเวลาที่ผ่านไประหว่างการอ่านดังกล่าวให้ตรงกับระดับนาทีนั้นได้