سؤال

اليوم هو الثلاثاء 9 فبراير 2010 وعندما أطبع التاريخ الذي أحصل عليه التاريخ الخطأ:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date today = formatter.parse(String.format("%04d-%02d-%02d",
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));

System.out.println("Today is " + today.toString());

خط الطباعة النتائج في: "اليوم السبت يناير 09 00:00:00 CST 2010"

الأمر بالتأكيد ليس السبت 09 يناير، إنه يوم الثلاثاء 09 فبراير. أفترض أنني أفعل شيئا خاطئا، لذلك يمكن لأي شخص أن يعرفني ما هو الخطأ هنا؟ هل يجب علي ضبط يوم الأسبوع يدويا؟

تحديث ملاحظة: لا أريد تهيئة اليوم مع new Date() لأنني أريد الساعات والدقائق والثواني والمللي ثانية تهيئة ل 0. وبعد هذا ضروري حتى أتمكن من مقارنة تاريخ إدخال المستخدم مع اليوم: إذا كان المستخدم مدخلات اليوم وتاريخ اليوم واستخدم الهياكل لإنشاء كائن تاريخ، فما إذا قمت بتهيئة اليوم new Date() وأنا أقارن التواريخ - اليوم سيكون بعد تاريخ محدد المستخدم (وهو غير صحيح). وبالتالي، أحتاج إلى تهيئة اليوم في بداية اليوم دون الموارد البشرية / MIN / SEC / MS.

هل كانت مفيدة؟

المحلول

من الناحية المرفوسة، عد أشهر التقويم من 0 (يناير) إلى 11 (ديسمبر)، لذلك أنت تمر "2010-01-09" للتشكيل. بالسبارة () عند استخراج حقل الشهر من التقويم.

هناك مناقشة لهذا في ذات صلة حتى سؤال.

نصائح أخرى

إذا كنت لا ترغب في استخدام Jodatime، فيمكنك استخدامها:

Calendar calendar = Calendar.getInstance();

calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );

Date today = calendar.getTime();

هذا هو أكثر كفاءة وأقل عرضة للخطأ من نهج تنسيق السلسلة / تحليلك.

إذا كنت تستطيع استخدام Jodatime، فهذه الطريقة المفضلة:

LocalDate date = new DateTime().toLocaleDate();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top