TL; DR
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18: 00: 00Z
java.time
เฟรมเวิร์ก java.time ใหม่ที่สร้างขึ้นใน Java 8 และใหม่กว่าคือตัวต่อของ Joda-Time
คลาสใหม่เหล่านี้มีวิธีใช้จากโรงงานที่สะดวกในการแปลงจำนวนวินาทีทั้งหมดจากกาล คุณได้Instant
เวลาสักครู่บนเส้นเวลาใน UTC พร้อมความละเอียดสูงสุดเป็นนาโนวินาที
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString (): 2010-07-30T18: 00: 00Z
เห็นว่ารหัสทำงานอยู่ที่ IdeOne.com
Asia/Kabul
หรือ Asia/Tehran
เขตเวลา
คุณรายงานการได้รับค่าเวลา 22:30 แทน 18:00 ที่เห็นที่นี่ ฉันสงสัยว่ายูทิลิตี้ PHP ของคุณกำลังใช้เขตเวลาเริ่มต้นในการปรับจาก UTC โดยปริยาย ค่าของฉันที่นี่คือ UTC มีความหมายโดยZ
(ย่อมาจากZulu
หมายถึง UTC) โอกาสที่ OS เครื่องของคุณหรือ PHP มีการตั้งค่าAsia/Kabul
หรือAsia/Tehran
โซนเวลา? ฉันคิดว่าอย่างนั้นเมื่อคุณรายงานผลงานIRST
ของคุณซึ่งหมายถึงเวลาของอิหร่าน ขณะนี้ในปี 2560 โซนเหล่านี้เป็นโซนเดียวที่เปิดให้บริการในช่วงฤดูร้อนซึ่งเป็นเวลาสี่ชั่วโมงครึ่งก่อนเวลา UTC
ระบุชื่อโซนเวลาที่เหมาะสมในรูปแบบของcontinent/region
เช่นAmerica/Montreal
, หรือAfrica/Casablanca
Pacific/Auckland
อย่าใช้อักษรย่อ 3-4 ตัวอักษรเช่นEST
หรือIST
หรือIRST
ที่พวกเขาจะไม่ได้โซนเวลาจริงไม่ได้มาตรฐานและไม่ได้ไม่ซ้ำกัน (!)
หากคุณต้องการที่จะเห็นช่วงเวลาของคุณผ่านเลนส์ของโซนเวลาภูมิภาคโดยเฉพาะอย่างยิ่งที่ใช้จะได้รับZoneId
ZonedDateTime
ยังคงเป็นช่วงเวลาที่พร้อมกันเดียวกัน แต่มองว่าเป็นความแตกต่างเวลาผนังนาฬิกา
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22: 30 + 04: 30 [เอเชีย / เตหะราน]
การแปลงจาก java.time เป็นคลาสดั้งเดิม
คุณควรใช้คลาส java.time ใหม่ แต่คุณสามารถเปลี่ยนเป็นเก่าได้ถ้าต้องการ
java.util.Date date = java.util.Date.from( instant );
Joda เวลา
UPDATE: โครงการJoda-Timeอยู่ในโหมดบำรุงรักษาโดยทีมงานจะแนะนำการโยกย้ายไปยังjava.timeคลาส
FYI ตัวสร้างสำหรับJoda-Time DateTimeคล้ายกัน: คูณด้วยหลักพันเพื่อสร้าง a long
(ไม่ใช่int
!)
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
ดีที่สุดเพื่อหลีกเลี่ยงคลาส java.util.Date และ. ปฏิทินที่มีปัญหาฉาวโฉ่ แต่ถ้าคุณต้องใช้วันที่คุณสามารถแปลงจาก Joda-Time
java.util.Date date = dateTime.toDate();
เกี่ยวกับjava.time
java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date
, และCalendar
SimpleDateFormat
Joda เวลาโครงการขณะนี้อยู่ในโหมดการบำรุงรักษาให้คำแนะนำแก่การโยกย้ายไปยังjava.timeชั้นเรียน
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310
คุณสามารถแลกเปลี่ยนวัตถุjava.timeโดยตรงกับฐานข้อมูลของคุณ ใช้ไดรเวอร์ JDBC ที่สอดคล้องกับJDBC 4.2หรือใหม่กว่า ไม่จำเป็นต้องใช้สตริงไม่จำเป็นต้องมีjava.sql.*
คลาส
จะรับคลาส java.time ได้ที่ไหน?
- Java SE 8 , Java SE 9และใหม่กว่า
- Built-in
- เป็นส่วนหนึ่งของ Java API มาตรฐานที่มีการใช้งานแบบรวม
- Java 9 เพิ่มคุณสมบัติและการแก้ไขเล็กน้อย
- Java SE 6และ Java SE 7
- มากของการทำงาน java.time จะกลับรังเพลิง Java 6 และ 7 ในThreeTen-ย้ายกลับ
- Android
- การใช้งานชุดบันเดิล Android รุ่นต่อมาของคลาส java.time
- สำหรับก่อนหน้านี้ Android (<26) ที่ThreeTenABPโครงการปรับThreeTen-ย้ายกลับ (ดังกล่าวข้างต้น) ดูวิธีการใช้ ThreeTenABP … .
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย