كيفية تحليل سلسلة كاملة من سلسلة كاملة باستخدام deadformat في جافا؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

حاولت هذا:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy");
Date d = fmt.parse("June 27, 2007");

خطأ:

Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"

يقول مستندات Java، يجب أن أستخدم أربعة أحرف لتتناسب مع النموذج الكامل. أنا فقط قادر على استخدام ط ط ط بنجاح مع الأشهر المختصرة مثل "يونيو" لكنني بحاجة إلى مطابقة النموذج الكامل.

النص: للتنسيق، إذا كان عدد أحرف النمط 4 أو أكثر، فسيتم استخدام النموذج الكامل؛ وإلا يتم استخدام نموذج قصير أو مختصر إذا كان ذلك متاحا. لتحليل، يتم قبول كلا النموذجين، مستقلة عن عدد أحرف النمط.

http://java.sun.com/j2se/1.6.0/docs/api/java/text/simpledatesformat.html.

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

المحلول

ربما تستخدم لغة مكان حيث لا تكون أسماء الشهر "يناير"، "فبراير"، وما إلى ذلك ولكن بعض الكلمات الأخرى بلغتك المحلية.

حاول تحديد اللغة التي ترغب في استخدامها، على سبيل المثال Locale.US:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27,  2007");

أيضا، لديك مساحة إضافية في سلسلة التاريخ، ولكن في الواقع هذا ليس له تأثير على النتيجة. انها تعمل في كلتا الحالتين.

نصائح أخرى

فقط لأعلى هذا الأمر إلى Java 8 API الجديد:

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MMMM dd, yyyy").toFormatter();
TemporalAccessor ta = formatter.parse("June 27, 2007");
Instant instant = LocalDate.from(ta).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date d = Date.from(instant);
assertThat(d.getYear(), is(107));
assertThat(d.getMonth(), is(5));

أكثر من ذلك قليلا، لكنك ترى أيضا أن طرق التاريخ المستخدمة يتم إهمالها ؛-) وقت للمضي قدما.

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