كيفية تحويل سلسلة تاريخ إلى كائن تاريخ أو تقويم؟
سؤال
انا املك String
تمثيل التاريخ الذي أحتاجه لإنشاء ملف Date
أو Calendar
كائن من.لقد نظرت من خلال Date
و Calendar
واجهات برمجة التطبيقات ولكن لم يتم العثور على أي شيء يمكنه القيام بذلك بخلاف إنشاء طريقة التحليل القبيحة الخاصة بي.أعلم أنه لا بد من وجود طريقة، هل يعرف أحد حلاً؟
المحلول
باختصار:
DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
e.printStackTrace();
}
يرى SimpleDateFormat
javadoc للمزيد من.
ولتحويله إلى Calendar
, ، يفعل:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
نصائح أخرى
ليرة تركية ؛ د
LocalDate.parse( "2015-01-02" )
java.time
يحتوي Java 8 والإصدارات الأحدث على إصدار جديد java.time الإطار الذي يجعل هذه الإجابات الأخرى عفا عليها الزمن.هذا الإطار مستوحى من جودا تايم, ، محدد بواسطة جي إس آر 310, ، والممتدة من قبل ثلاثة عشرة اضافية مشروع.انظر درس تعليمي.
الفئات المجمعة القديمة، java.util.Date/.Calendar، مزعجة ومربكة بشكل ملحوظ.تجنبهم.
LocalDate
مثل Joda-Time، يحتوي java.time على فصل دراسي LocalDate
لتمثيل قيمة التاريخ فقط بدون الوقت من اليوم وبدون المنطقة الزمنية.
ايزو 8601
إذا كانت سلسلة الإدخال الخاصة بك في المعيار ايزو 8601 تنسيق yyyy-MM-dd
, ، يمكنك أن تطلب من هذا الفصل تحليل السلسلة مباشرة دون الحاجة إلى تحديد منسق.
يتم استخدام تنسيقات ISO 8601 بشكل افتراضي في java.time، لكل من التحليل وإنشاء تمثيلات سلسلة لقيم التاريخ والوقت.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
المنسق
إذا كان لديك تنسيق مختلف، فحدد منسقًا من ملف java.time.format طَرد.يمكنك إما تحديد نمط التنسيق الخاص بك أو السماح لـ java.time بالترجمة تلقائيًا بما يتناسب مع ملف Locale
تحديد لغة بشرية للترجمة والمعايير الثقافية لاتخاذ قرار بشأن قضايا مثل النقطة مقابل الفاصلة.
نمط التنسيق
إقرأ ال DateTimeFormatter
class doc للحصول على تفاصيل حول الرموز المستخدمة في نمط التنسيق.أنها تختلف قليلا عن القديم الذي عفا عليه الزمن java.text.SimpleDateFormat
أنماط الطبقة.
لاحظ كيف أن الوسيطة الثانية لـ parse
الطريقة هي أ مرجع الطريقة, تمت إضافة بناء الجملة إلى Java 8 والإصدارات الأحدث.
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
تفريغ إلى وحدة التحكم.
System.out.println ( "localDate: " + localDate );
التاريخ المحلي:2015-01-02
التعريب تلقائيا
أو بدلاً من تحديد نمط التنسيق، اسمح لـ java.time بالترجمة نيابةً عنك.يتصل DateTimeFormatter.ofLocalizedDate
, ، وتأكد من تحديد المطلوب/المتوقع Locale
بدلاً من الاعتماد على الإعداد الافتراضي الحالي لـ JVM والذي يمكن أن يتغير في أي لحظة أثناء وقت التشغيل (!).
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
تفريغ إلى وحدة التحكم.
System.out.println ( "input: " + input + " | localDate: " + localDate );
مدخل:2 يناير 2015 | LocalDate:2015-01-02
ال بتقدير كبير مكتبة جودا تايم هو أيضا يستحق نظرة.وهذا هو الأساس الجديد التاريخ والوقت API التي تم رسمها بالقلم الرصاص في Java 7.التصميم أنيق وبديهي، وثق بشكل جيد ويتجنب الكثير من الخرقاء في الأصل java.util.Date
/ java.util.Calendar
الطبقات.
جودا DateFormatter
يمكن تحليل سلسلة إلى Joda DateTime
.
جرب هذا:
DateFormat.parse(String)
ال DateFormat
فئة لديها parse
طريقة.
يرى http://java.sun.com/j2se/1.4.2/docs/api/Java/text/DateFormat.html للمزيد من المعلومات.