سؤال

السلسلة التي أريد تنسيقها تبدو مثل هذا: 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">

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