TL; DR
ในUTC :
Instant.now().minus( 1 , ChronoUnit.HOURS )
หรือแบ่งเขต:
Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )
ใช้ java.time
Java 8 และใหม่กว่ามีกรอบjava.timeใหม่ในตัว
Instant
หากคุณสนใจเฉพาะ UTC (GMT) ให้ใช้Instant
ชั้นเรียน
Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );
ถ่ายโอนไปยังคอนโซล
System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );
ทันที: 2015-10-29T00: 37: 48.921Z | instantHourEarlier: 2015-10-28T23: 37: 48.921Z
สังเกตว่าในช่วงเวลานี้เกิดขึ้นได้อย่างไรในการข้ามกลับไปยังวันที่ของเมื่อวาน
ZonedDateTime
หากคุณสนใจเกี่ยวกับเขตเวลาให้ใช้ZonedDateTime
ชั้นเรียน คุณสามารถเริ่มต้นด้วยการค้นหาทันใจและกำหนดเขตเวลาZoneId
วัตถุ ชั้นนี้จะจัดการปรับเปลี่ยนที่จำเป็นสำหรับความผิดปกติเช่นปรับเวลาตามฤดูกาล (DST)
Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );
ถ่ายโอนไปยังคอนโซล
System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );
ทันที: 2015-10-29T00: 50: 30.778Z
zdt: 2015-10-28T20: 50: 30.778-04: 00 [อเมริกา / มอนทรีออล]
zdtHourEarlier: 2015-10-28T19: 50: 30.778-04: 00 [อเมริกา / มอนทรีออล]
การแปลง
ขณะนี้คลาส java.util.Date/.Calendar เก่าล้าสมัยแล้ว หลีกเลี่ยงพวกเขา พวกเขามีปัญหาและสับสนฉาวโฉ่
เมื่อคุณต้องใช้คลาสเก่าสำหรับการดำเนินการกับรหัสเก่าที่ยังไม่ได้อัปเดตสำหรับประเภท java.time ให้เรียกใช้วิธีการแปลง นี่คือตัวอย่างโค้ดที่มาจาก Instant หรือ ZonedDateTime ไปยัง java.util.Date
java.util.Date date = java.util.Date.from( instant );
…หรือ…
java.util.Date date = java.util.Date.from( zdt.toInstant() );
เกี่ยวกับjava.time
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
และอื่น ๆ อีกมากมาย
mktime
java ที่เทียบเท่าหรือไม่ ลบ 60 นาทีจากมัน?