تشترك هذه المقالة في الأساليب المشتركة لتشغيل وقت التقويم ، والمحتوى المحدد هو كما يلي
اختبار الحزمة ؛ استيراد java.text.simpleDateFormat ؛ استيراد java.util.calendar ؛ استيراد java.util.date ؛/** * الطرق المشتركة للتاريخ والتقويم ، تم إهمال العديد من طرق التاريخ ، لذا فإن التقويم هو المبلغ الرئيسي [ {// استخدم التاريخ المباشر للحصول على وقت النظام الحالي ، والنتيجة: Tue May 03 08:25:44 CST 2016 Date = New Date () ؛ // العديد من الطرق في التاريخ ، مثل الحصول على سنة معينة ، والشهر ، واليوم ، وما إلى ذلك ، وتحديد سنة معينة ، شهر ، يوم ، وما إلى ذلك ، لم يعد موصى به. // يوصى باستخدام طرق مختلفة من التقويم بدلاً من ذلك ، لذلك لا يتم إجراء أي سجلات // الحصول على المللي ثانية من التاريخ المحدد ، والتي تستخدم غالبًا لمقارنة أحجام تواريخين. Date.getTime () ؛ // استخدم التقويم للحصول على وقت النظام الحالي. تحتاج إلى الحصول على كائن التقويم وتحويله إلى تقويم إخراج التاريخ = Calendar.getInstance () ؛ // هذه الطريقة مكافئة للوقت في التاريخ ، والحصول على المللي ثانية من الوقت الحالي Calendar.getTimeInmillis () ؛ // الحصول على تاريخ اليوم الأول من الأسبوع الذي يكون فيه التاريخ المحدد. الافتراضي في اليوم الأول من الأسبوع هو تقويم الأحد. السنة والشهر واليوم ، النتيجة الناتجة: الاثنين 03 يونيو 09:31:59 CST 2013 // ذات الصلة بشكل شائع الأساليب الزائد: التقويم (السنة ، الشهر ، التاريخ ، الساعة ، الدقيقة) ؛ جميع المعلمات هي intcalendar.set (2013 ، 5 ، 3) ؛ System.out.println (calendar.gettime ()) ؛ // استخدم التقويم إلى السنة المحددة ، النتيجة النتيجة: الجمعة 03 يونيو 09:42:43 09:45:32 CST 2011Calendar.set (Calendar.mon ، 0) ؛ System.out.println (Calendar.getTime ()) Calendar.Feberduary) ؛ system.out.println (Calendar.getTime ()) ؛ // قم بتعيين اليوم مع التقويم والأرقام ، نتيجة الإخراج: SAT فبراير 09:48:25 CST 2011 // calendar.set (Calendar.day_of_month ، 5) النتيجة هي نفسها ؛ calendar.set (calendar.date ، 5) ؛ system.out.println (calendar.gettime ()) ؛ // تعيين calendar.set (calendar.hour ، 15) ؛ system.out.println (calendar.gettime ()) 09: 25: 29String fordate = dateToString (date date ()) ؛ system.out.println (fordate) ؛ // string حتى الآن ، نتيجة الإخراج: الخميس 12 نوفمبر 13:23:11 2015Calendar Calendar2 = datetocalendar (strdate) ؛ system.out.println (calendar2.get (1)) ؛}/*** قم بتحويل وقت التاريخ المحدد إلى سلسلة بالتنسيق المحدد** @author: tuzongxun* title: datetostring* pparam date* @throws*/static string dateToString (تاريخ التاريخ) {string str = "yyyy-mm-dd hh: mm: ss" ؛ simpledateformat format = new SimplEdateFormat (str) ؛ string dateFormat = format.format (date) ؛ return dateFormat ؛} StringTodate* paramparam string* return void* date 3 مايو ، 2016 9:16:38 am* @throws*/static date stringtodate (سلسلة سلسلة) {String str = "yyyy-mm-dd hh: mm: ss" (استثناء E) {E.GetStackTrace () ؛} تاريخ الإرجاع ؛}/*** قم بتحويل تاريخ التاريخ المحدد إلى نوع التقويم** Auuthor: Tuzongxun* title Calendar = Calendar.getInstance () ؛ Calendar.Settime (Date) ؛ Return Calendar ؛}}ما المزالق الأخرى الموجودة؟
أين الحفرة:
في مشروع صادفته من قبل ، شاركت في وظيفة: انقل بعض البيانات إلى مجموعة أخرى من قواعد بيانات MongoDB كل يوم ، أي جداول قاعدة البيانات العلائقية. اسم المجموعة هذا هو اسم ثابت بالإضافة إلى العام والشهر الذي يوجد فيه تاريخ الحالي قبل شهرين.
كانت هذه الوظيفة موجودة قبل أن أتواصل مع هذا المشروع ، وهي وظيفة تنفذها زملائي السابقين ، وكتبت مهمة توقيت Java.
لم يعد هذا الزميل في شركتنا ، لكنه وجد مؤخرًا أن هذه الوظيفة لديها بعض المشكلات. حركة البيانات ليست كما هو متوقع. ظهرت البيانات التي كان ينبغي أن تكون موجودة في فبراير في جدول يناير.
جذر الحفرة:
يتم الحفاظ على المشكلات المتعلقة بـ MongoDB مؤقتًا من قبلي ، وهذه المشكلة تحتاج بطبيعة الحال إلى حلها ، لذلك أخرجت رمزه وقرأته. نتيجة لذلك ، تم العثور على المشكلة لتكون الطرق ذات الصلة للتقويم.
لنقل البيانات منذ شهرين ، يجب عليك أولاً الحصول على التاريخ منذ شهرين. الرمز ذي الصلة لإنشاء اسم الجدول هو كما يلي:
سلسلة خاصة getDataCollectionName () {Calendar Calendar = calendar.getInstance () ؛ حاول {calendar.set (calendar.date ، -day) ؛ return "arav_" + toolutils.datetoformatstrdate (calendar.getTime () ، "yyyy_mm") ؛ } catch (استثناء e) {logger.error ("{}: فشل تحويل البيانات ، {}" ، this.getClass (). getName () ، e.getMessage ()) ؛ } إرجاع فارغ ؛ }تكمن المشكلة في طريقة SET للتقويم ، بما في ذلك وقت البدء والنهاية لاستخدام بيانات الاستعلام لاحقًا ، ويتم استخدام الشيء نفسه هو Calendar.set (Calendar.Date ، -Day) ؛
للوهلة الأولى ، يبدو أن هذه الطريقة تحدد التاريخ إلى التاريخ الحالي ناقص العدد المحدد من الأيام ، ولكن في الواقع ، فإن النتيجة ليست كما هو متوقع كما ستحصل على الموعد قبل شهرين (يحدد اليوم 60 ، أي شهرين).
املأ الحفرة:
بعد العثور على السبب ، استبدلت هذه الطريقة وتغيير مجموعة لإضافة. أما بالنسبة للمعلمات في الداخل ، لم يتم نقلها. أثبتت النتيجة أن هذه الطريقة يمكن أن تدرك حقًا الوظيفة الحالية ، والنتيجة التي تم الحصول عليها هي بالضبط النتيجة المتوقعة.
بالطبع ، يمكنك أيضًا تغيير المعلمات قليلاً دون تغيير الطريقة ، مثل Calendar.set (Calendar.date ، Calendar.get (Calendar.Date)-Day) ؛
ما سبق هو كل شيء عن هذه المقالة ، وآمل أن يكون من المفيد للجميع إتقان الأساليب المشتركة لتشغيل الوقت التقويم.