كيف يمكن التحكم في الكتابة بالأحرف الكبيرة لأسماء الأشهر واليوم التي يتم إرجاعها بواسطة DateFormat؟
-
09-06-2019 - |
سؤال
إليك برنامج اختبار سريع:
public static void main( String[] args )
{
Date date = Calendar.getInstance().getTime();
System.out.println("Months:");
printDate( "MMMM", "en", date );
printDate( "MMMM", "es", date );
printDate( "MMMM", "fr", date );
printDate( "MMMM", "de", date );
System.out.println("Days:");
printDate( "EEEE", "en", date );
printDate( "EEEE", "es", date );
printDate( "EEEE", "fr", date );
printDate( "EEEE", "de", date );
}
public static void printDate( String format, String locale, Date date )
{
System.out.println( locale + ": " + (new SimpleDateFormat( format, new Locale( locale ) )).format( date ) );
}
الإخراج هو:
Months:
en: September
es: septiembre
fr: septembre
de: September
Days:
en: Monday
es: lunes
fr: lundi
de: Montag
كيف يمكنني التحكم في الحروف الكبيرة للأسماء.لسبب ما، يبدو أن اللغتين الإسبانية والفرنسية تشيران دائمًا إلى الأسماء التي تبدأ بحرف صغير.
المحلول
لا تشترك جميع اللغات في قواعد الكتابة بالأحرف الكبيرة باللغة الإنجليزية.أعتقد أنك ستحتاج إلى تغيير البيانات التي تستخدمها واجهة برمجة التطبيقات (API)، ولكن قد لا يقدرها عملاؤك الذين لا يتحدثون الإنجليزية...
نصائح أخرى
تختلف قواعد الكتابة بالأحرف الكبيرة باختلاف اللغات.باللغة الفرنسية أسماء الأشهر لا ينبغي أن تكون بالأحرف الكبيرة.
قد لا ترغب في تغيير الكتابة بالأحرف الكبيرة - فالثقافات المختلفة تكتب بأحرف كبيرة كلمات مختلفة (على سبيل المثال، في اللغة الألمانية تكتب كل اسم بالأحرف الكبيرة، وليس فقط أسماء العلم).
ليرة تركية ؛ د
كيف يمكنني التحكم في الحروف الكبيرة للأسماء
لم تكن.اللغات المختلفة والثقافات المختلفة لها قواعد مختلفة حول الكتابة بالأحرف الكبيرة، وعلامات الترقيم، والاختصار، وما إلى ذلك.
Month.from( LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) ) // Get current month.
.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) // Localize automatically. Specify `Locale` to determine human language and cultural norms for translation.
فيفرييه
LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) // Get current date as seen by people in a certain region (time zone).
.getDayOfWeek() // Get the day-of-week as a pre-defined `DayOfWeek` enum object.
.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )
لوندي
توطين
كما ذكر آخرون، لا ينبغي عليك فرض مفاهيمك الضيقة (الإنجليزية الأمريكية؟) الخاصة بالأحرف الكبيرة.استخدم مكتبة مناسبة للتاريخ والوقت، واسمح لها بالترجمة تلقائيًا نيابةً عنك.
java.time
أنت تستخدم فئات التاريخ والوقت القديمة الرهيبة التي أصبحت الآن قديمة، وحلت محلها فئات java.time.
ال LocalDate
تمثل الفئة قيمة التاريخ فقط بدون الوقت من اليوم وبدون المنطقة الزمنية.
المنطقة الزمنية أمر بالغ الأهمية في تحديد التاريخ.في أي لحظة، يختلف التاريخ حول العالم حسب المنطقة.على سبيل المثال، بعد دقائق قليلة من منتصف الليل باريس، فرنسا هو يوم جديد بينما لا يزال "الأمس" في مونتريال، كيبيك.
حدد أ اسم المنطقة الزمنية المناسبة في شكل continent/region
, ، مثل America/Montreal
, Africa/Casablanca
, ، أو Pacific/Auckland
.لا تستخدم أبدًا الاختصار المكون من 3-4 أحرف مثل EST
أو IST
كما هم لا مناطق زمنية حقيقية، غير موحدة، وليست فريدة حتى (!).
ZoneId z = ZoneId.of( "Asia/Kolkata" );
LocalDate today = LocalDate.now( z );
للعمل مع شهر، قم باستخراج أ Month
كائن التعداد.كما سبق بالنسبة ليوم الأسبوع، DayOfWeek
.
يتصل getDisplayName
.تمرير أ TextStyle
للاختصار.تمرير أ Locale
لتحديد (أ) اللغة البشرية لترجمة اسم اليوم، واسم الشهر، وما إلى ذلك، و(ب) المعايير الثقافية التي تقرر مسائل الاختصار، والأحرف الكبيرة، وعلامات الترقيم، والفواصل، وما إلى ذلك.لاحظ أن Locale
لديه لا شئ للقيام بالمنطقة الزمنية.
Month m = today.getMonth() ;
String mNameQuébec = m.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
String mNameGermany = m.getDisplayName( TextStyle.FULL , Locale.GERMANY ) ;
…و…
DayOfWeek dow = today.getDayOfWeek() ;
String dowNameQuébec = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
String dowNameGermany = dow.getDisplayName( TextStyle.FULL , Locale.GERMANY ) ;
عن java.time
ال java.time إطار العمل مدمج في Java 8 والإصدارات الأحدث.تحل هذه الفئات محل الفئات القديمة المزعجة إرث فئات التاريخ والوقت مثل java.util.Date
, Calendar
, & SimpleDateFormat
.
ال جودا تايم المشروع، الآن في نمط الصيانة, ، ينصح بالهجرة إلى java.time الطبقات.
لمعرفة المزيد، راجع أوراكل البرنامج التعليمي.وابحث في Stack Overflow عن العديد من الأمثلة والشروحات.المواصفات هي جي إس آر 310.
مع سائق JDBC متوافق مع جي دي بي سي 4.2 أو في وقت لاحق، يمكنك تبادل java.time الكائنات مباشرة مع قاعدة البيانات الخاصة بك.لا حاجة للسلاسل أو فئات java.sql.*.
أين يمكن الحصول على دروس Java.time؟
- جافا سي 8, جافا سي 9, ، و لاحقا
- مدمج.
- جزء من Java API القياسي مع تطبيق مجمع.
- يضيف Java 9 بعض الميزات والإصلاحات البسيطة.
- جافا سي 6 و جافا سي 7
- يتم نقل الكثير من وظائف java.time إلى Java 6 و7 بوصة ThreeTen-Backport.
- ذكري المظهر
- الإصدارات اللاحقة من تطبيقات حزمة Android لفئات java.time.
- بالنسبة لنظام التشغيل Android الأقدم، كان ثريتنABP يتكيف المشروع ThreeTen-Backport (المذكور أعلاه).يرى كيفية استخدام ThreeTenABP....
ال ثلاثة عشرة اضافية يقوم المشروع بتوسيع Java.time بفئات إضافية.يعد هذا المشروع بمثابة أرض اختبار للإضافات المستقبلية المحتملة إلى java.time.قد تجد بعض الفئات المفيدة هنا مثل Interval
, YearWeek
, YearQuarter
, ، و أكثر.
أواجه مشكلة الآن حيث تبدأ الجملة بـ "dimanche 07 mars"، وهو أمر لا يهم إذا لم يكن في بداية الجملة.أعتقد أن هذا لا يمكن تغييره، إلا إذا قمت بمعالجة السلسلة يدويًا على الحرف الأول من السلسلة.