غير قادر على تحليل التسلل مع علامة AM/PM
-
26-09-2019 - |
سؤال
السلسلة التي أريد تنسيقها تبدو مثل هذا: String DateTime = "9/1/10 11:34:35 AM"
النمط التالي لأعمال SimpleDateFormat:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss");
Date d = sdf.parse(datetime);
System.out.println(d);
Output> [Wed Sep 01 11:34:35 CEST 2010]
ومع ذلك ، أحتاج إلى تحليل علامة AM/PM أيضًا ، وعندما أضيف ذلك إلى النمط الذي أتلقى استثناءً.
النمط الذي لا يعمل:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss a");
لقد حاولت مع هذا أيضا مع نفس الاستثناء:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss aa");
استثناء:
java.text.ParseException: Unparseable date: "9/1/10 11:34:35 AM"
لقد نظرت من خلال واجهة برمجة التطبيقات في http://download.oracle.com/javase/1.4.2/docs/api/java/text/simpledateformat.html#text ولكن يبدو أن Canät يجد المكان الذي أخطأ فيه.
أي اقتراحات؟
المحلول
أحد الاحتمالات هو أن الافتراضي الخاص بك Locale
لديه رموز مختلفة لـ AM/PM. عند إنشاء تنسيق تاريخ ، يجب عليك دائمًا توفير ملف Locale
ما لم تكن تريد حقًا استخدام افتراضي النظام Locale
, ، على سبيل المثال:
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)
نصائح أخرى
أنا أتخذ مثالاً على التاريخ الوارد أدناه وطباعة تاريخ تنسيق إلى تنسيق على مدار 24 ساعة إذا كان يناسب متطلباتك.
String inputdate="9/1/10 11:34:35 AM";
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd/MM/yy hh:mm:ss aa",Locale.getDefault());
try {
System.out.println(""+new SimpleDateFormat("dd/MM/yy HH:mm:ss",Locale.getDefault()).format(simpleDateFormat.parse(inputdate)));
} catch (ParseException e) {
e.printStackTrace();
}
إذا كان لا يزال لديك أي استفسار ، فيرجى الرد. شكرًا.
الجواب الحديث:
String datetime = "9/1/10 11:34:35 AM";
LocalDateTime dt = LocalDateTime.parse(datetime,
DateTimeFormatter.ofPattern("M/d/yy h:mm:ss a", Locale.ENGLISH));
هذا ينتج LocalDateTime
من 2010-09-01T11: 34: 35. احذر من عامين من رقمين ، على الرغم من ؛ DateTimeFormatter
سوف أفترض من 2000 إلى 2099. لعيد ميلادي ، كان هذا غير صحيح.
ما زلنا بحاجة إلى توفير اللغة. نظرًا لأن علامات AM/PM بالكاد تستخدم في الممارسة العملية في أماكن أخرى من اللغة الإنجليزية ، فقد فكرت Locale.ENGLISH
رهان آمن إلى حد ما. الرجاء استبدال بنفسك.
كانت الإجابات الأخرى كانت إجابات جيدة في عامي 2010 و 2011. بالفعل في عام 2014 ، كان ما سبق صالحًا وأفضل ذلك.
إذا كنت تعمل مع Freemarker لـ Java و Pop على هذه المشكلة ، فاستخدم الكود أدناه. لقد واجهت هذه المشكلة ، مجموعة المكانين الخاصة بي AM/PM. غير متأكد من السبب...<#setting locale="en_US">