كيف يمكن التحكم في الكتابة بالأحرف الكبيرة لأسماء الأشهر واليوم التي يتم إرجاعها بواسطة DateFormat؟

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

  •  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)، ولكن قد لا يقدرها عملاؤك الذين لا يتحدثون الإنجليزية...

about.com بالأحرف الكبيرة الفرنسية

نصائح أخرى

تختلف قواعد الكتابة بالأحرف الكبيرة باختلاف اللغات.باللغة الفرنسية أسماء الأشهر لا ينبغي أن تكون بالأحرف الكبيرة.

قد لا ترغب في تغيير الكتابة بالأحرف الكبيرة - فالثقافات المختلفة تكتب بأحرف كبيرة كلمات مختلفة (على سبيل المثال، في اللغة الألمانية تكتب كل اسم بالأحرف الكبيرة، وليس فقط أسماء العلم).

ليرة تركية ؛ د

كيف يمكنني التحكم في الحروف الكبيرة للأسماء

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

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؟

ال ثلاثة عشرة اضافية يقوم المشروع بتوسيع Java.time بفئات إضافية.يعد هذا المشروع بمثابة أرض اختبار للإضافات المستقبلية المحتملة إلى java.time.قد تجد بعض الفئات المفيدة هنا مثل Interval, YearWeek, YearQuarter, ، و أكثر.

أواجه مشكلة الآن حيث تبدأ الجملة بـ "dimanche 07 mars"، وهو أمر لا يهم إذا لم يكن في بداية الجملة.أعتقد أن هذا لا يمكن تغييره، إلا إذا قمت بمعالجة السلسلة يدويًا على الحرف الأول من السلسلة.

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