لماذا تحليل '23: 00 مساء 'مع simpleedateformat ("HH: MM AA") العودة 11 صباحا؟

StackOverflow https://stackoverflow.com/questions/1154903

  •  18-09-2019
  •  | 
  •  

سؤال

لماذا تحليل '23: 00 مساء 'مع SimpleDateFormat("hh:mm aa") العودة 11 صباحا؟

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

المحلول

يجب أن تحصل على استثناء، لأن "23:00 مساء" ليست سلسلة صالحة، لكن مرفق تاريخ / وقت Java هو متساهل بشكل افتراضي، عند معالجة تحليل التاريخ.

المنطق هو أن 23:00 مساء بعد 12 ساعة بعد 11:00 مساء، وهو 11:00 صباحا في اليوم التالي. سترى أيضا أشياء مثل "31 أبريل" يتم تحليلها بأنها "1 مايو" (بعد يوم واحد من 30 أبريل).

إذا كنت لا تريد هذا السلوك، فقم بتعيين خاصية Lainient إلى False على SimpleDateFormat باستخدام DateFormat # Setlenient (منطقية), ، وستحصل على استثناء عند المرور في تاريخ / أوقات غير صالحة.

نصائح أخرى

تريد "HH: MM AA" كنسيق الخاص بك، إذا كنت سوف تحليل وقت 24 ساعة.

public static void main(String[] args) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
    final Date date = df.parse("23:00 PM");
    System.out.println("date = " + df.format(date));
}

المخرجات

date = 23:00 PM

هل حاولت HH:mm aa?

HH هو لمدة 24 ساعة hh هو لمدة 12.

فيما يلي خيارات التنسيق المحددة في جافادوك

H     Hour in day (0-23)    
k   Hour in day (1-24)  
K   Hour in am/pm (0-11)    
h   Hour in am/pm (1-12) 

لاحظ أن "H" ستكون لساعات 1-12. إذا كنت ترغب في التعامل مع 1-24، فجرب "K". ل 0-23 حاول "H". لكنني لا أتوقع نتائج صالحة إذا كنت تضع بيانات مستحيلة.

23:00 مساء يمكن أن يعتقد أنه 11 صباحا اليوم المقبل. وبعد JavaScript و PHP العمل مثل هذا إلى حد كبير ولكن لا يمكنني التحدث عن جافا.

أعتقد أنه يفعل شيئا مثل:

hours = hours % 12;

للتأكد من أن الساعات في النطاق المناسب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top