บทความนี้แบ่งปันวิธีการทั่วไปของการดำเนินการตามเวลาปฏิทินเนื้อหาเฉพาะมีดังนี้
การทดสอบแพ็คเกจการนำเข้า java.text.simpledateFormat; นำเข้า java.util.calendar; นำเข้า java.util.date;/** * วิธีการทั่วไปของวันที่และปฏิทินวิธีการวันที่จำนวนมากได้ถูกเลิกใช้ดังนั้นปฏิทินหลัก * * * * * * * * * * * * * * * * * * * * {// ใช้วันที่โดยตรงเพื่อรับเวลาระบบปัจจุบันผลลัพธ์: อังคาร 03 08:25:44 CST 2016 วันที่ = วันที่ใหม่ (); // วิธีการมากมายในวันที่เช่นการได้รับปีเดือนวัน ฯลฯ // ขอแนะนำให้ใช้วิธีการต่าง ๆ ของปฏิทินแทนดังนั้นจึงไม่มีการบันทึก // รับมิลลิวินาทีของวันที่ที่ระบุซึ่งมักจะใช้เพื่อเปรียบเทียบขนาดของสองวันที่ date.getTime (); // ใช้ปฏิทินเพื่อรับเวลาระบบปัจจุบัน คุณต้องได้รับวัตถุปฏิทินและแปลงเป็นปฏิทินปฏิทินวันที่ = ปฏิทิน getInstance (); // วิธีนี้เทียบเท่ากับการรับเวลาในวันที่และรับมิลลิวินาทีของปฏิทินเวลาปัจจุบัน gettimeinmillis (); วันแรกเริ่มต้นของสัปดาห์คือปฏิทินวันอาทิตย์ GetFirstDayOfWeek (); // ส่งคืนปีที่วันที่ปฏิทินปัจจุบันคือ 2016Calendar.get (1); // ปฏิทินถูกแปลงเป็นวันที่) กำหนดปีเดือนและวันผลการส่งออก: จันทร์ มิ.ย. 03 09:31:59 CST 2013 // วิธีที่ใช้กันมากเกินไปวิธีการใช้งานมากเกินไป: ปฏิทิน Set (ปี, เดือน, วันที่, ชั่วโมงวัน, นาที); // calendar.set (ปี, เดือน, วันที่, วันวัน พารามิเตอร์ทั้งหมดคือ intcalendar.set (2013, 5, 3); System.out.println (Calendar.getTime ()); // ใช้ปฏิทินเพื่อตั้งค่าปีผลผลลัพธ์: วันศุกร์ที่ 03 03 09:42:43 CST 2011Calendar.set (ปฏิทิน. ปี 2011); System.out.println 09:45:32 CST 2011Calendar.Set (ปฏิทิน MONTH, 0); System.out.println (ปฏิทิน. getTime ()); // ตั้งค่าเดือนด้วยปฏิทินและค่าคงที่ของตัวเองโปรดทราบว่าเดือนเริ่มต้นที่ 0 ปฏิทินเดือนกุมภาพันธ์); System.out.println (Calendar.getTime ()); // ตั้งค่าวันด้วยปฏิทินและตัวเลขผลการส่งออก: SAT ก.พ. 05 09:48:25 CST 2011 // Calendar.Set (Calendar.day_of_month, 5) ผลลัพธ์เดียวกัน; 5); System.out.println (Calendar.getTime ()); // ตั้งค่าชั่วโมงปฏิทิน Set (Calendar.Hour, 15); System.out.println (Calendar.getTime ()); // ตั้งเวลาปฏิทินตามจำนวน Milliseconds Calendar.settiminmillis (0) 09: 25: 29String Fordate = DatetOstring (วันที่ใหม่ ()); System.out.println (Fordate); // String จนถึงปัจจุบันผลลัพธ์ผลลัพธ์: พ.อ. 12 พ.ย. 13:23:11 CST 2015date strdate = StringTodate ("2015-11-12 13:23:11"); 2015Calendar Calendar2 = datetocalendar (strdate); system.out.println (Calendar2.get (1));}/*** แปลงประเภทวันที่ที่ระบุเป็นสตริงในรูปแบบที่ระบุ** @author: tuzongxun* @title 9:09:25 AM* @throws*/สตริงคงที่ datetoString (วันที่วันที่) {string str = "yyyy-mm-dd hh: mm: ss"; รูปแบบ simpledateFormat = new SimpleDateFormat (str); String dateformat = format. @title: StringTodate* @param @param String* @return เป็นโมฆะ* @date 3 พฤษภาคม 2016 9:16:38 am* @throws*/วันที่คงที่สตริง (สตริงสตริง) {string str = "yyyy-mm-dd hh: mm: ss"; format.parse (String);} catch (Exception e) {e.getStackTrace ();} วันที่ส่งคืน;}/*** แปลงวันที่ที่ระบุวันที่เป็นประเภทปฏิทิน** @author: tuzongxun* @title: datetocalendar* @param @param วันที่ DateTocalEndar (วันที่วันที่) {ปฏิทินปฏิทิน = Calendar.getInstance (); Calendar.Settime (วันที่); Return Calendar;}}มีข้อผิดพลาดอื่น ๆ อีกบ้าง?
หลุมอยู่ที่ไหน:
ในโครงการที่ฉันเคยเจอมาก่อนฉันเกี่ยวข้องกับฟังก์ชั่น: ย้ายข้อมูลบางอย่างไปยังคอลเลกชันอื่นของฐานข้อมูล MongoDB ทุกวันนั่นคือตารางของฐานข้อมูลเชิงสัมพันธ์ ชื่อคอลเลกชันนี้เป็นชื่อคงที่บวกกับปีและเดือนที่วันที่สองเดือนที่ผ่านมาปัจจุบันตั้งอยู่
ฟังก์ชั่นนี้มีอยู่ก่อนที่ฉันจะติดต่อกับโครงการนี้ซึ่งเป็นฟังก์ชั่นที่เพื่อนร่วมงานคนก่อนของฉันใช้และเขียนงานเวลา Java
เพื่อนร่วมงานคนนั้นไม่ได้อยู่ใน บริษัท ของเราอีกต่อไป แต่เมื่อเร็ว ๆ นี้เขาพบว่าฟังก์ชั่นนี้มีปัญหาบางอย่าง การเคลื่อนไหวของข้อมูลไม่เป็นไปตามที่คาดไว้ ข้อมูลที่ควรมีอยู่ในเดือนกุมภาพันธ์ปรากฏในตารางเดือนมกราคม
รากของหลุม:
ปัญหาที่เกี่ยวข้องกับ MongoDB ได้รับการดูแลชั่วคราวโดยฉันและปัญหานี้จำเป็นต้องได้รับการแก้ไขโดยฉันดังนั้นฉันจึงเอารหัสของเขาออกมาและอ่านมัน เป็นผลให้ปัญหาพบว่าเป็นวิธีการที่เกี่ยวข้องของปฏิทิน
ในการถ่ายโอนข้อมูลจากสองเดือนที่ผ่านมาคุณต้องได้รับวันที่สองเดือนที่ผ่านมาก่อน รหัสที่เกี่ยวข้องสำหรับการสร้างชื่อตารางมีดังนี้:
สตริงส่วนตัว getDataCollectionName () {ปฏิทินปฏิทิน = calendar.getInstance (); ลอง {calendar.set (calendar.date, -day); ส่งคืน "Alarm_" + toolutils.datetoformatstrdate (calendar.getTime (), "yyyy_mm"); } catch (exception e) {logger.error ("{}: การแปลงข้อมูลล้มเหลว, {}", this.getClass (). getName (), e.getMessage ()); } return null; -ปัญหาอยู่ในวิธีการที่กำหนดของปฏิทินรวมถึงเวลาเริ่มต้นและสิ้นสุดของการใช้ข้อมูลแบบสอบถามในภายหลังและใช้เช่นเดียวกันคือปฏิทิน Set (Calendar.date, -day);
เมื่อมองแวบแรกวิธีนี้ดูเหมือนว่าจะกำหนดวันที่เป็นวันที่ปัจจุบันลบจำนวนวันที่ระบุ แต่ในความเป็นจริงผลลัพธ์ไม่ได้คาดว่าจะเป็นไปได้อย่างที่คุณจะได้รับวันที่สองเดือนที่ผ่านมา (วันที่นี่กำหนด 60 นั่นคือสองเดือน)
เติมในหลุม:
หลังจากค้นหาเหตุผลฉันแทนที่วิธีนี้และเปลี่ยนชุดเพื่อเพิ่ม สำหรับพารามิเตอร์ภายในมันไม่ได้ถูกย้าย ผลการพิสูจน์ว่าวิธีนี้สามารถตระหนักถึงฟังก์ชั่นปัจจุบันอย่างแท้จริงและผลลัพธ์ที่ได้รับนั้นเป็นผลลัพธ์ที่คาดหวังไว้อย่างแท้จริง
แน่นอนคุณสามารถเปลี่ยนพารามิเตอร์ได้เล็กน้อยโดยไม่ต้องเปลี่ยนวิธีการเช่นปฏิทิน Set (Calendar.date, Calendar.get (Calendar.date) -day);
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้และฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนที่จะเชี่ยวชาญวิธีการทั่วไปของการดำเนินการตามเวลาปฏิทิน