ฉันจะรับวันที่และเวลาปัจจุบันใน Java ได้อย่างไร
ฉันกำลังมองหาบางอย่างที่เทียบเท่ากับDateTime.Now
C #
ฉันจะรับวันที่และเวลาปัจจุบันใน Java ได้อย่างไร
ฉันกำลังมองหาบางอย่างที่เทียบเท่ากับDateTime.Now
C #
คำตอบ:
เพียงสร้างDate
วัตถุใหม่โดยไม่มีข้อโต้แย้งใด ๆ สิ่งนี้จะกำหนดวันที่และเวลาปัจจุบันให้กับวัตถุใหม่
import java.util.Date;
Date d = new Date();
ในคำพูดของJavadocsสำหรับตัวสร้างศูนย์อาร์กิวเมนต์ :
จัดสรรวัตถุวันที่และเริ่มต้นมันเพื่อที่จะแสดงเวลาที่มันได้รับการจัดสรรวัดเป็นมิลลิวินาทีที่ใกล้ที่สุด
ตรวจสอบให้แน่ใจว่าคุณใช้อยู่java.util.Date
และไม่ใช่java.sql.Date
- ตัวหลังไม่มีตัวสร้าง zero-arg และมีซีแมนทิกส์ที่แตกต่างกันบ้างซึ่งเป็นหัวข้อของการสนทนาที่แตกต่างกันโดยสิ้นเชิง :)
คลาสJava DateและCalendarได้รับการพิจารณาจากหลาย ๆ คนว่าไม่ถูกต้อง คุณควรดูJoda Timeซึ่งเป็นไลบรารีที่ใช้กันโดยทั่วไปแทนการใช้ไลบรารีวันที่ในตัวของ Java
สิ่งที่เทียบเท่าDateTime.Now
ใน Joda Time คือ:
DateTime dt = new DateTime();
ปรับปรุง
ตามที่ระบุไว้ในความคิดเห็นเวอร์ชันล่าสุดของ Joda Time มีDateTime.now()
วิธีการดังนี้:
DateTime dt = DateTime.now();
Instant.now()
คลาส java.util.Date ได้รับการoutmoded โดยแพคเกจ java.timeใหม่( Tutorial ) ใน Java 8 และใหม่กว่า คลาส java.util.Date/.Calendar เก่า ๆ มีปัญหายุ่งยากสับสนและมีข้อบกพร่อง หลีกเลี่ยงพวกเขา
ZonedDateTime
รับช่วงเวลาปัจจุบันเป็น java.time
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime
สุนทรีย์:
หากไม่ได้ระบุเขตเวลาไว้เขตเวลาเริ่มต้นปัจจุบันของ JVM ของคุณจะถูกกำหนดอย่างเงียบ ๆ ดีกว่าที่จะระบุโซนเวลาที่คุณต้องการ / คาดว่าจะดีกว่าพึ่งพาปริยายโดยปริยาย
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
โดยทั่วไปจะดีกว่าหากคุณมีนิสัยชอบทำงานแบ็คเอนด์ (ตรรกะทางธุรกิจฐานข้อมูลการจัดเก็บการแลกเปลี่ยนข้อมูล) ในเขตเวลาUTC รหัสข้างต้นอาศัยนัยในโซนเวลาเริ่มต้นปัจจุบันของ JVM
Instant
ชั้นหมายถึงช่วงเวลาในระยะเวลาเวลา UTC กับความละเอียดของนาโนวินาที
Instant instant = Instant.now();
Instant
ชั้นเป็นชั้นอาคารบล็อกพื้นฐานใน java.time และอาจจะใช้บ่อยในรหัสของคุณ
OffsetDateTime
เมื่อคุณต้องการความยืดหยุ่นมากขึ้นในการจัดรูปแบบแปลงเป็น ระบุZoneOffset
วัตถุ สำหรับ UTC ใช้ประโยชน์อย่างต่อเนื่องสำหรับ UTC
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
คุณสามารถปรับเป็นโซนเวลาอื่นสำหรับการนำเสนอต่อผู้ใช้ ใช้ชื่อโซนเวลาที่เหมาะสม , ไม่เคย 3-4 รหัสตัวอักษรเช่นหรือEST
IST
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
สร้างการเป็นตัวแทนสตริงของค่าวันที่และเวลาที่มีการแปล
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
หรือจะอยู่ใน UTC Instant
ใช้ Instant
วัตถุหมายถึงช่วงเวลาในระยะเวลาที่จะมีมติ nanosecond เสมอในเวลา UTC สิ่งนี้แสดง Building Block สำหรับวันที่กำหนดเวลารวมถึงการกำหนดเขตเวลา คุณสามารถคิดได้ด้วยวิธีนี้:
คุณสามารถแยกจากInstant
ZonedDateTime
Instant instantNow = zdt.toInstant();
คุณสามารถเริ่มต้นได้ทันที ไม่จำเป็นต้องระบุเขตเวลาที่นี่เช่นเดียวกับInstant
ใน UTC
Instant now = Instant.now();
ฉันชอบที่จะใช้วัตถุปฏิทิน
Calendar now = GregorianCalendar.getInstance()
ฉันพบว่าการทำงานกับมันง่ายกว่ามาก นอกจากนี้คุณยังสามารถรับวัตถุวันที่จากปฏิทิน
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
ใน Java 8 คือ:
ZonedDateTime dateTime = ZonedDateTime.now();
import java.util.Date;
Date now = new Date();
โปรดทราบว่าวันที่วัตถุที่ไม่แน่นอนและถ้าคุณต้องการที่จะทำอะไรที่มีความซับซ้อนใช้jodatime
java.lang.System.currentTimeMillis();
จะคืนค่าวันที่และเวลาตั้งแต่ยุค
import org.joda.time.DateTime;
DateTime now = DateTime.now();
หากคุณสร้างวัตถุ Date ใหม่โดยค่าเริ่มต้นวัตถุจะถูกตั้งค่าเป็นเวลาปัจจุบัน:
import java.util.Date;
Date now = new Date();
Java ได้รับการสนับสนุนที่ไม่เพียงพอสำหรับกรณีการใช้วันที่และเวลา ตัวอย่างเช่นคลาสที่มีอยู่ (เช่นjava.util.Date
และSimpleDateFormatter
) ไม่ปลอดภัยสำหรับเธรดซึ่งอาจนำไปสู่ปัญหาการเกิดพร้อมกัน นอกจากนี้ยังมีข้อบกพร่องบางอย่างใน API ตัวอย่างเช่นปีที่java.util.Date
เริ่มต้นที่ 1900 เดือนเริ่มต้นที่ 1 และวันเริ่มต้นที่ 0 - ไม่ง่ายมาก Joda-Time
ปัญหาเหล่านี้จะนำไปสู่ความนิยมของวันที่และเวลาของบุคคลที่สามห้องสมุดเช่น เพื่อระบุวันที่และเวลาใหม่ API ได้รับการออกแบบสำหรับ Java SE 8
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
ตามเอกสาร :
วิธีการที่
now()
จะส่งกลับวันเวลาปัจจุบันโดยใช้นาฬิการะบบและเริ่มต้นโซนเวลาไม่เป็นโมฆะ มันได้รับวันที่เวลาปัจจุบันจากนาฬิกาของระบบในเขตเวลาเริ่มต้น สิ่งนี้จะทำการสืบค้นนาฬิกาของระบบในเขตเวลาเริ่มต้นเพื่อรับวันที่ปัจจุบัน การใช้วิธีนี้จะป้องกันความสามารถในการใช้นาฬิกาสำรองสำหรับการทดสอบเนื่องจากนาฬิกามีการเข้ารหัสยาก