คุณจะรับชั่วโมงและนาทีตั้งแต่Date.getHours
และDate.getMinutes
เลิกได้อย่างไร ตัวอย่างที่ฉันพบในการค้นหาของ Google ใช้วิธีการที่เลิกใช้แล้ว
คุณจะรับชั่วโมงและนาทีตั้งแต่Date.getHours
และDate.getMinutes
เลิกได้อย่างไร ตัวอย่างที่ฉันพบในการค้นหาของ Google ใช้วิธีการที่เลิกใช้แล้ว
คำตอบ:
ลองใช้Joda Timeแทนคลาส java.util.Date มาตรฐาน ห้องสมุด Joda Time มี API ที่ดีกว่ามากสำหรับการจัดการวันที่
DateTime dt = new DateTime(); // current time
int month = dt.getMonth(); // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day
ดูคำถามนี้สำหรับข้อดีข้อเสียของการใช้ห้องสมุด Joda Time
Joda เวลาก็อาจจะรวมถึงบางรุ่นในอนาคตของ Java เป็นองค์ประกอบมาตรฐานดูJSR-310
หากคุณต้องใช้คลาส java.util.Date และ java.util.Calendar ดั้งเดิมดูที่ JavaDoc's เพื่อขอความช่วยเหลือ ( java.util.Calendarและjava.util.Date )
คุณสามารถใช้คลาสดั้งเดิมเช่นนี้เพื่อดึงข้อมูลจากอินสแตนซ์วันที่ที่กำหนด
Date date = new Date(); // given date
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date); // assigns calendar to given date
calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
calendar.get(Calendar.HOUR); // gets hour in 12h format
calendar.get(Calendar.MONTH); // gets month number, NOTE this is zero based!
จาก Javadoc สำหรับ Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
ดังนั้นใช้
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
และเทียบเท่ากับ getMinutes
ZonedDateTime
แทน
ในขณะที่ฉันเป็นแฟนของJoda-Time , Java 8แนะนำแพคเกจjava.timeซึ่งเป็นทางออกมาตรฐานที่คุ้มค่าที่สุดของ Java! อ่านบทความนี้วันที่และเวลาของ Java SE 8สำหรับข้อมูลจำนวนมากบน java.time นอกเวลาและนาที
โดยเฉพาะอย่างยิ่งมองไปที่LocalDateTime
ชั้นเรียน
ชั่วโมงและนาที:
LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
คุณอาจต้องการที่จะให้โซนเวลาที่ชัดเจนเพื่อเตือนให้ผู้อ่านและตัวคุณเองว่านี่คือโซนเวลาการดำเนินงานที่มีความสำคัญ: อ่านnow()
เพียงครั้งเดียวเพื่อความมั่นคง (เวลาจะผ่านระหว่างการโทรสองครั้ง) หากวันที่ไม่เกี่ยวข้องจริง ๆ ก็ใช้LocalTime
งานได้เช่นกัน
ZonedDateTime
LocalDateTime
เมื่อLocalDateTime
คุณทิ้งข้อมูลเขตเวลาอันมีค่าด้วยเหตุผลใดก็ตามโดยไม่ได้รับอะไรเลย
ก่อนอื่นให้นำเข้า java.util.Calendar
Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));
ZonedDateTime.now().getHour()
… หรือ …
LocalTime.now().getHour()
ZonedDateTime
คำตอบโดย JDเป็นสิ่งที่ดี แต่ไม่ดีที่สุด คำตอบนั้นใช้LocalDateTime
คลาส ไม่มีแนวคิดเกี่ยวกับเขตเวลาหรือออฟเซ็ตจาก UTC ซึ่งคลาสไม่สามารถแสดงช่วงเวลาได้
ZonedDateTime
ดีกว่าที่จะใช้
ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
หากคุณไม่ใช้ZoneId
อาร์กิวเมนต์จะมีการใช้งานโดยปริยายที่รันไทม์โดยใช้เขตเวลาเริ่มต้นปัจจุบันของ JVM
ดังนั้นนี่คือ:
ZonedDateTime.now()
... เหมือนกับสิ่งนี้:
ZonedDateTime.now( ZoneId.systemDefault() )
ดีกว่าที่จะชัดเจนผ่านเขตเวลาที่คุณต้องการ / ที่คาดไว้ ค่าเริ่มต้นสามารถเปลี่ยนแปลงได้ตลอดเวลาระหว่างรันไทม์
หากสำคัญให้ยืนยันโซนเวลากับผู้ใช้
ซักZonedDateTime
ถามชั่วโมงและนาที
int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;
LocalTime
หากคุณต้องการเพียงแค่ช่วงเวลาของวันโดยไม่โซนเวลา, LocalTime
สารสกัดจาก
LocalTime lt = zdt.toLocalTime() ;
หรือข้ามอย่างสิ้นเชิงไปโดยตรงไปยังZonedDateTime
LocalTime
LocalTime lt = LocalTime.now( z ) ; // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date
, และCalendar
SimpleDateFormat
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310
Joda เวลาโครงการขณะนี้อยู่ในโหมดการบำรุงรักษาให้คำแนะนำแก่การโยกย้ายไปยังjava.timeชั้นเรียน
คุณสามารถแลกเปลี่ยนวัตถุjava.timeโดยตรงกับฐานข้อมูลของคุณ ใช้ไดรเวอร์ JDBC ที่สอดคล้องกับJDBC 4.2หรือใหม่กว่า ไม่จำเป็นต้องใช้สตริงไม่จำเป็นต้องมีjava.sql.*
คลาส
จะรับคลาส java.time ได้ที่ไหน?
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย
ลองใช้ปฏิทิน ใช้ getInstance เพื่อรับ Calender-Object จากนั้นใช้ setTime เพื่อตั้งค่าวันที่ที่ต้องการ ตอนนี้คุณสามารถใช้รับ (ฟิลด์ int) กับค่าคงที่ที่เหมาะสมเช่น HOUR_OF_DAY หรือเพื่ออ่านค่าที่คุณต้องการ
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();
ฟังก์ชั่นเหล่านี้จะคืนค่า int ในชั่วโมงและนาที
java.sql.Time
คือ java.time.LocalTime
แน่นอนเหตุผลที่ทุกคนไม่ว่าจะนำระดับล้าสมัยลงเล่นเมื่อคุณได้มี คุณกำลังซับซ้อนเกินไป
getMinutes()
เลิกใช้แล้ว (ฉันใช้จาวา 1.8) และถูกแทนที่ด้วยCalendar.get(Calendar.MINUTE)
อีกวิธีหนึ่งในการรับนาทีและชั่วโมงคือการใช้ SimpleDateFormat
SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())
SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())
java.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และต่อมา ดูการสอนโดยออราเคิล
ฉันอยากจะแนะนำให้ดูเวลาโฆษณา http://www.joda.org/joda-time/
ฉันกลัวที่จะเพิ่มห้องสมุดอื่นในโปรเจคหนาของฉัน แต่มันง่ายและเร็วและฉลาดและดีเลิศ นอกจากนี้มันเล่นดีกับรหัสที่มีอยู่ในระดับหนึ่ง
แม้ว่าฉันจะไม่แนะนำให้ทำเช่นนั้น แต่ฉันคิดว่ามันคุ้มค่าที่จะชี้ให้เห็นว่าแม้ว่าวิธีการหลายอย่างใน java.util.Date นั้นไม่ได้รับการสนับสนุน แต่ก็ยังใช้งานได้ ในสถานการณ์เล็ก ๆ น้อย ๆ มันอาจโอเคที่จะใช้มัน นอกจากนี้ java.util.Calendar ค่อนข้างช้าดังนั้น getMonth และ getYear ณ วันที่อาจจะเร็วกว่านี้
public static LocalTime time() {
LocalTime ldt = java.time.LocalTime.now();
ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
System.out.println(ldt);
return ldt;
}
มันใช้งานได้สำหรับฉัน
import java.util.*
คุณสามารถใช้เวลาและนาทีโดยใช้ปฏิทินและคลาสตัวจัดรูปแบบ Calendar cal = Calendar.getInstance()
และFormatter fmt=new Formatter()
และตั้งค่ารูปแบบสำหรับชั่วโมงการแสดงผลและนาทีfmt.format("%tl:%M",cal,cal)
และSystem.out.println(fmt)
แสดงผลการพิมพ์เช่น10:12
java.util.Date
,java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และต่อมา ดูการสอนโดยออราเคิล