স্ট্রিং হিসাবে মাসের নাম


90

আমি স্ট্রিং হিসাবে মাসের নাম ফেরত দেওয়ার চেষ্টা করছি, উদাহরণস্বরূপ "মে", "সেপ্টেম্বর", "নভেম্বর"।

আমি চেষ্টা করেছিলাম:

int month = c.get(Calendar.MONTH);

তবে, এটি পূর্ণসংখ্যার (যথাক্রমে 5, 9, 11) প্রদান করে। আমি কীভাবে মাসের নাম পেতে পারি?

উত্তর:


88

GetDisplayName ব্যবহার করুন ।

পূর্ববর্তী এপিআই এর ব্যবহারের জন্য String.format(Locale.US,"%tB",c);


আমার একটি সমস্যা হয়েছে: getDisplayName (মাস, ক্যালেন্ডার.লং, স্থানীয়
গ্যাবি

এটা খুব আজব। আপনি ব্যবহার করছেন java.util.Calendarএবং অন্য কোনও Calendarক্লাস নয়, তাই না?
ট্রুথিলিটি

হ্যাঁ. এটি getDisplayName () এবং সম্পর্কিত ক্যালেন্ডারের মতো দেখাচ্ছে L দীর্ঘ এবং ক্যালেন্ডার HSHORT কেবলমাত্র API স্তর 9। সুতরাং, 9 স্তরের জন্য কাজ করে, কিন্তু আমি :( স্তর 7 প্রয়োজন
Gaby

4
Formatter f = new Formatter();(allyচ্ছিকভাবে আপনি এটিকে স্থানীয়ভাবে দিতে পারেন) তারপরে String monthName = f.format("%tB",c).toString();বা %tbসংক্ষিপ্ত নামের জন্য।
ট্রুথিলিটি

4
লোকালের পরিবর্তে লোকাল.জেট ডেফল্ট () ব্যবহার করা ভাল US ইউএস ভাল ধারণা হতে পারে :)
শাইন

163

এটা ব্যবহার কর :

Calendar cal=Calendar.getInstance();
SimpleDateFormat month_date = new SimpleDateFormat("MMMM");
String month_name = month_date.format(cal.getTime());

মাসের নামটিতে পুরো মাসের নাম থাকবে, আপনি যদি চান স্বল্প মাসের নাম এটি ব্যবহার করুন

 SimpleDateFormat month_date = new SimpleDateFormat("MMM");
 String month_name = month_date.format(cal.getTime());

13
"এমএমএমএম" প্রথম ক্ষেত্রে যথেষ্ট হবে।
yanchenko

119

স্ট্রিং ভেরিয়েবলে মাস পাওয়ার জন্য নীচের কোডটি ব্যবহার করুন

উদাহরণস্বরূপ সেপ্টেম্বর মাস:

এম -> 9

এমএম -> 09

এমএমএম -> সেপ্টেম্বর

এমএমএমএম -> সেপ্টেম্বর

String monthname=(String)android.text.format.DateFormat.format("MMMM", new Date())

4
হ্যাঁ, ধন্যবাদ, এটি আমি যে সকল ভাষাতে ব্যবহার করি (ফরাসি, ইংরেজি, জার্মান)
কবজির মতো কাজ করে

46

"এমএমএমএম" অবশ্যই সঠিক সমাধান নয় (যদিও এটি অনেক ভাষার ক্ষেত্রে কাজ করে), এর সাথে "এলএলএলএল" প্যাটার্নটি ব্যবহার করুন SimpleDateFormat

একা একা মাসের নামের জন্য আইসিইউ-সামঞ্জস্যপূর্ণ এক্সটেনশন হিসাবে 'এল' এর জন্য সমর্থনটি জুন ২০১০ এ অ্যান্ড্রয়েড প্ল্যাটফর্মে যুক্ত করা হয়েছিল ।

এমনকি ইংরেজিতে 'এমএমএমএম' এবং 'এলএলএলএল' দ্বারা এনকোডিংয়ের মধ্যে কোনও পার্থক্য না থাকলেও আপনার অন্যান্য ভাষা সম্পর্কেও ভাবা উচিত।

উদাহরণস্বরূপ, আপনি যা পাবেন এটি যদি আপনি Calendar.getDisplayNameরাশিয়ানদের সাথে জানুয়ারীর জন্য "এমএমএমএম" প্যাটার্নটি ব্যবহার করেন বা করেন Locale:

января (যা সম্পূর্ণ তারিখের স্ট্রিংয়ের জন্য সঠিক: " 10 января, 2014) ")

তবে একা একা মাসের নামটি আপনি আশা করতে পারেন:

январь

সঠিক সমাধানটি হ'ল:

 SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
 dateFormat.format( date );

আপনি যদি আগ্রহী হন যে সমস্ত অনুবাদগুলি কোথা থেকে এসেছে - এখানে গ্রেগরিয়ান ক্যালেন্ডার অনুবাদগুলি (পৃষ্ঠার উপরে লিঙ্কযুক্ত অন্যান্য ক্যালেন্ডার) এর উল্লেখ।


4
'এলএলএলএল' কেবল জাভা 8-এর জন্য উপলভ্য, আপনি সিম্পলডেটফর্ম্যাট সহ 'এমএমএমএম' ব্যবহার করতে পারেন এবং এটি স্বতন্ত্র সংস্করণেও পুরোপুরি সূক্ষ্ম কাজ করে।
juanheyns

পরিষ্কারভাবে বলতে গেলে, রাশিয়ান ভাষায় "Января" এর অনুবাদটি হ'ল জেনেটিক কেস, যার অর্থ "জানুয়ারী" যেখানে "Январь" মনোনীত, যার অর্থ "জানুয়ারী"। ইউক্রেনীয় এবং সার্বিয়ান এর মতো পার্থক্য সহ অন্যান্য স্লাভিক ভাষা থাকতে পারে। এটি কেবল ব্যাকরণগত এবং সাধারণত খুব গুরুত্বপূর্ণ নয়। তবে এই উত্তরে প্রদত্ত ব্যবহারের ক্ষেত্রগুলি ব্যাকরণগতভাবে সঠিক: সম্পূর্ণ তারিখের জন্য এমএমএমএম ব্যবহার করুন এবং আপনি যতটা সম্ভব যথাসম্ভব সঠিক হতে চাইলে মাসটি নিজের হাতে প্রদর্শন করার সময় এলএলএলএল ব্যবহার করুন।
মুনলাইটচিজ

আপনাকে ধন্যবাদ, আমি রাশিয়ান ল্যাং মামলার সাথে লড়াই করে
যাচ্ছিলাম

26

এই হিসাবে সহজ

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());

ক্যালেন্ডার.লং মাসের পুরো নাম এবং ক্যালেন্ডার পেতে হয় SSHORT সংক্ষেপে নাম দেয়। উদাহরণস্বরূপ: ক্যালেন্ডার.লং জানুয়ারী ক্যালেন্ডারে ফিরে আসবে S


দুর্দান্ত উত্তর। আমি নিজের দ্বারা ক্যালেন্ডারটি অ্যালার্মের জন্য সেট করেছিলাম এবং পরে মাসের নামটি পাওয়া দরকার। নিখুঁত উত্তর। ধন্যবাদ
আজজি

10

আমি এই উত্তরটি রাখি যা অন্যান্য ক্ষেত্রে কার্যকর, তবে @ সংঘাতের উত্তরটি সবচেয়ে সহজ এবং প্রত্যক্ষ উপায় বলে মনে হচ্ছে।

আপনি ডেটফর্ম্যাটসিম্বলগুলি ব্যবহার করতে পারেন

DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example

5

অ্যানড্রয়েডের একমাত্র উপায় যেমন ইনসিরিসি, রাশিয়ান, চেক এর মতো ভাষার জন্য স্ট্যান্যালোন মাসের নামটি সঠিকভাবে ফর্ম্যাট করা

private String getMonthName(Calendar calendar, boolean short) {
    int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY | DateUtils.FORMAT_NO_YEAR;
    if (short) {
        flags |= DateUtils.FORMAT_ABBREV_MONTH;
    }
    return DateUtils.formatDateTime(getContext(), calendar.getTimeInMillis(), flags);
}

15-25 এআইপি তে পরীক্ষিত

জন্য আউটপুট মে হয় Май কিন্তু Мая


3

রাশিয়ান

Month
.MAY
.getDisplayName(
    TextStyle.FULL_STANDALONE ,
    new Locale( "ru" , "RU" )
)

май

আমেরিকা যুক্তরাষ্ট্রের ইংরেজি।

Month
.MAY
.getDisplayName(
    TextStyle.FULL_STANDALONE ,
    Locale.US
)

মে

IdeOne.com এ এই কোডটি সরাসরি চালিত দেখুন ।

থ্রিটেনএবিপি এবং জাভা.টাইম

আধুনিক উত্তর এখানে। এই প্রশ্নটি যখন ২০১১ সালে জিজ্ঞাসা করা হয়েছিল, CalendarএবংGregorianCalendar সাধারণত খেজুর এবং সময়গুলির জন্য ব্যবহৃত হয় যদিও সেগুলি সর্বদা খারাপভাবে ডিজাইন করা হত। এটি আজ থেকে 8 বছর আগে, এবং এই ক্লাসগুলি দীর্ঘ পুরানো। ধরে নিই যে আপনি এখনও এপিআই লেভেল ২ on এ নেই, আমার পরামর্শটি থ্রিটেনএবিপি লাইব্রেরিটি ব্যবহার করার জন্য যা জাভা.টাইমের একটি অ্যান্ড্রয়েড অ্যাডাপ্টড ব্যাকপোর্ট, আধুনিক জাভা তারিখ এবং সময় এপিআই রয়েছে। জাভা.টাইম এর সাথে কাজ করা এত সুন্দর।

আপনার সঠিক প্রয়োজন এবং পরিস্থিতির উপর নির্ভর করে দুটি বিকল্প রয়েছে:

  1. ব্যবহার Monthএবং তার getDisplayNameপদ্ধতি।
  2. ব্যবহার ক DateTimeFormatter

মাস ব্যবহার করুন

    Locale desiredLanguage = Locale.ENGLISH;
    Month m = Month.MAY;
    String monthName = m.getDisplayName(TextStyle.FULL, desiredLanguage);
    System.out.println(monthName);

এই স্নিপেট থেকে আউটপুট হল:

মে

কয়েকটি ভাষায় এটি ব্যবহার করবে TextStyle.FULLবা ব্যবহার করবে না কেন তা তফাত্ করবে TextStyle.FULL_STANDALONE। আপনাকে দেখতে হবে, সম্ভবত আপনার ব্যবহারকারীদের সাথে চেক করুন, দু'জনের মধ্যে কোনটি আপনার প্রসঙ্গে ফিট করে।

একটি ডেটটাইম ফরমেটার ব্যবহার করুন

আপনি যদি দিনের সাথে বা সময় ছাড়া কোনও তারিখ পেয়ে থাকেন তবে আমি DateTimeFormatterআরও কার্যকর বলে মনে করি। উদাহরণ স্বরূপ:

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM", desiredLanguage);

    ZonedDateTime dateTime = ZonedDateTime.of(2019, 5, 31, 23, 49, 51, 0, ZoneId.of("America/Araguaina"));
    String monthName = dateTime.format(monthFormatter);

আমি এ ব্যবহার ZonedDateTimeকরছি, পুরানো Calendarশ্রেণীর নিকটতম প্রতিস্থাপন । উপরের কোড একটি জন্য কাজ করবে LocalDateএকটি LocalDateTime, MonthDay, OffsetDateTimeএবং একটি YearMonthখুব।

আপনি যদি Calendarকোনও লিগ্যাসি এপিআই থেকে একটি এখনও পান জাভা.টাইমে আপগ্রেড না করে? এ রূপান্তর করুন ZonedDateTimeএবং উপরে হিসাবে এগিয়ে যান:

    Calendar c = getCalendarFromLegacyApi();
    ZonedDateTime dateTime = DateTimeUtils.toZonedDateTime(c);

বাকিটা আগের মতোই।

প্রশ্ন: জাভা.টাইমে অ্যান্ড্রয়েড এপিআই লেভেল 26 প্রয়োজন হয় না?

java.Time পুরানো এবং নতুন উভয় Android ডিভাইসগুলিতে দুর্দান্তভাবে কাজ করে। এটির জন্য কমপক্ষে জাভা 6 প্রয়োজন

  • জাভা 8 এবং তারপরে এবং আরও নতুন অ্যান্ড্রয়েড ডিভাইসে (এপিআই স্তর 26 টি থেকে) আধুনিক এপিআই অন্তর্নির্মিত আসে।
  • অ অ্যান্ড্রয়েড জাভা 6 এবং 7-এ থ্রিটেন ব্যাকপোর্ট, আধুনিক ক্লাসগুলির ব্যাকপোর্ট (জেএসআর 310 এর জন্য থ্রিডেন; নীচে লিঙ্কগুলি দেখুন) পান।
  • (পুরানো) অ্যান্ড্রয়েড থ্রিটেন ব্যাকপোর্টের অ্যান্ড্রয়েড সংস্করণ ব্যবহার করে। একে থ্রিটেনএবিপি বলে। এবং org.threeten.bpসাব-প্যাকেজগুলি সহ আপনি তারিখ এবং সময় ক্লাসগুলি আমদানি করেছেন তা নিশ্চিত করুন ।

লিঙ্কগুলি


2

আমি Calendarঅবজেক্টটি ব্যবহার করার পরামর্শ দিচ্ছি এবং Localeযেহেতু মাসের নাম বিভিন্ন ভাষার জন্য আলাদা:

// index can be 0 - 11
private String getMonthName(final int index, final Locale locale, final boolean shortName)
{
    String format = "%tB";

    if (shortName)
        format = "%tb";

    Calendar calendar = Calendar.getInstance(locale);
    calendar.set(Calendar.MONTH, index);
    calendar.set(Calendar.DAY_OF_MONTH, 1);

    return String.format(locale, format, calendar);
}

পুরো মাসের নামের জন্য উদাহরণ:

System.out.println(getMonthName(0, Locale.US, false));

ফলাফল: January

সংক্ষিপ্ত মাসের নামের জন্য উদাহরণ:

System.out.println(getMonthName(0, Locale.US, true));

ফলাফল: Jan


2

"2018 নভেম্বর 01 16:18:22" এই ফর্ম্যাটে তারিখ এবং সময় পাওয়ার একটি নমুনা উপায় এটি ব্যবহার করুন

DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
        Date date = new Date();
         dateFormat.format(date);

0

একক মাসের নাম পাওয়া জাভাতে "ডান" সম্পাদন করা আশ্চর্যজনকভাবে কঠিন। (কমপক্ষে এই লেখা হিসাবে। আমি বর্তমানে জাভা 8 ব্যবহার করছি)।

সমস্যাটি হ'ল রাশিয়ান এবং চেক সহ কয়েকটি ভাষায়, মাসের নামের একক সংস্করণ "ফর্ম্যাটিং" সংস্করণ থেকে আলাদা। এছাড়াও, এটি প্রদর্শিত হয় যে কোনও একক জাভা এপিআই আপনাকে কেবল "সেরা" স্ট্রিং দেবে না। এখানে এখনও পোস্ট করা বেশিরভাগ উত্তর কেবল বিন্যাসের সংস্করণ সরবরাহ করে। একক মাসের নামের একক সংস্করণ পাওয়ার জন্য বা সেগুলির সাথে একটি অ্যারের পাওয়ার জন্য নীচে আটকানো একটি কার্যক্ষম সমাধান।

আমি আশা করি এটি অন্য কাউকে কিছুটা সময় বাঁচায়!

/**
 * getStandaloneMonthName, This returns a standalone month name for the specified month, in the
 * specified locale. In some languages, including Russian and Czech, the standalone version of
 * the month name is different from the version of the month name you would use as part of a
 * full date. (Different from the formatting version).
 *
 * This tries to get the standalone version first. If no mapping is found for a standalone
 * version (Presumably because the supplied language has no standalone version), then this will
 * return the formatting version of the month name.
 */
private static String getStandaloneMonthName(Month month, Locale locale, boolean capitalize) {
    // Attempt to get the standalone version of the month name.
    String monthName = month.getDisplayName(TextStyle.FULL_STANDALONE, locale);
    String monthNumber = "" + month.getValue();
    // If no mapping was found, then get the formatting version of the month name.
    if (monthName.equals(monthNumber)) {
        DateFormatSymbols dateSymbols = DateFormatSymbols.getInstance(locale);
        monthName = dateSymbols.getMonths()[month.getValue()];
    }
    // If needed, capitalize the month name.
    if ((capitalize) && (monthName != null) && (monthName.length() > 0)) {
        monthName = monthName.substring(0, 1).toUpperCase(locale) + monthName.substring(1);
    }
    return monthName;
}

/**
 * getStandaloneMonthNames, This returns an array with the standalone version of the full month
 * names.
 */
private static String[] getStandaloneMonthNames(Locale locale, boolean capitalize) {
    Month[] monthEnums = Month.values();
    ArrayList<String> monthNamesArrayList = new ArrayList<>();
    for (Month monthEnum : monthEnums) {
        monthNamesArrayList.add(getStandaloneMonthName(monthEnum, locale, capitalize));
    }
    // Convert the arraylist to a string array, and return the array.
    String[] monthNames = monthNamesArrayList.toArray(new String[]{});
    return monthNames;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.