Takvimden Ay Adı Nasıl Alınır?


Yanıtlar:


101

Bu şekilde de alacaksın.

  String getMonthForInt(int num) {
        String month = "wrong";
        DateFormatSymbols dfs = new DateFormatSymbols();
        String[] months = dfs.getMonths();
        if (num >= 0 && num <= 11 ) {
            month = months[num];
        }
        return month;
    }

6
DateFormatSymbols uygulaması JDK 8'de değiştirildi, bu nedenle getMonths yöntemi artık tüm
Locale'ler

1
JDK8 için bir geçici çözüm / çalışan bir çözüm verebilir misiniz?
Dominik

bir ayı ne zaman bir sayı olarak alırsın?
Mickey Perlstein

Mickey sorunuzu yanıtlamak için, işte int olarak ayı nasıl elde edeceğiniz ve onu nasıl kullanacağınız - public static void main (String [] args) {int ay; GregorianCalendar tarihi = new GregorianCalendar (); ay = tarih.get (Takvim.MONTH); System.out.println ("Geçerli ay" + (ay + 1) + "ve Ay adı" + getMonthForInt (ay)); } statik Dize getMonthForInt (int num) {Dize ay = "yanlış"; DateFormatSymbols dfs = new DateFormatSymbols (); Dize [] ay = dfs.getMonths (); if (num> = 0 && num <= 11) {month = months [num]; } dönüş ayı; }
Ajay Kumar

194

Bunu tarih ve saatleri biçimlendirmek amacıyla SimpleDateFormat kullanarak elde edebilirsiniz .

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));

Bu işe yarayacak, ancak dizeyi yeniden almak istiyorum. endeksini bildiğim ayın. Sanırım diğer yaklaşımları kullanacağım, teşekkürler.
ogzd

48
bu, mevcut ayın adını almamda bana yardımcı oldu. kısaltılmış bir ay yerine tam ay adını almak için ("MMMM") kullandım.
speedynomads

79

Bu kadar basit

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

4
Takvim soyutlamasının kullanılması bence en zarif çözüm. +1
sebastian

2
Yanlış! Sorun, vakaların olduğu dillerde olacak. Örneğin, Slav yerel ayarları o ru-RU Ekim için, örneğin, tamlama halinde ay dönecektir Alacağınız yerel ayarı октябряyerine Октябрьmuhtemelen bekledikleri.
Nick Sikrier

41

Bir sınıf projesi için bulduğum çözüm bu:

public static String theMonth(int month){
    String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    return monthNames[month];
}

Verdiğiniz numara bir Calendar.MONTHaramadan gelir .


2
Bu benim için yararlınew SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani

Bu vs. jan, Şubat Ocak Şubat vs değil eklenmesi hakkında bu her durumda kapsamaz nasıl, zayıf bir çözümdür
Abeer zaroor

2
Peki, aya 1 eklemelisiniz. Diziler 0'dan başlıyor.
RoccoDev

1
Bu, İngilizce konuşan kullanıcılar için çalışıyor. Ya diğerleri?
Advait S

1
@MickeyPerlstein Hayır. Bu, Java'yı 'yeniden keşfetmek' değil (sizin deyiminizle). Ve bu da 'kötü' değil. Bu basitçe bunu yapmanın bir yolu. Bunun yanı sıra bu, bazı durumlarda arzu edilebilecek olan Takvim sınıfını kullanmak zorunda olmamanıza dayanmaktadır (veya en azından kullanmak zorunda değilsiniz - ancak içinde bulunduğunuz ayı istiyorsanız). Elbette sadece İngilizce için ama asıl konu bu değil.
Pryftan

33

Eğer çoklu dil arayüzüne sahipseniz, dilin görüntülenmesini kontrol ederek ayın adını görüntülemek için getDisplayName kullanabilirsiniz.

Aşağıda, "Suriye" gibi belirli bir ülkede ay adının İngilizce, frensh, arapça ve arapça görüntülenmesi için bir örnek verilmiştir:

    Calendar c = Calendar.getInstance();
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.FRANCE ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar") ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar", "SY") ) );
    System.out.println(c.getTime().toString());

sonuç:

  January
  janvier
  يناير
  كانون الثاني
  Sat Jan 17 19:31:30 EET 2015

Bu hangi java sürümü?
Muhammad Gelbana

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

Bazı diller için (örneğin Rusça), bağımsız ay adlarını almanın tek doğru yolu budur.

Bu kullanırsanız, elde ediyoruz getDisplayNamedan Calendarveya DateFormatSymbolsOcak için:

января (tam bir tarih dizesi için doğrudur: " 10 января, 2014 ")

ancak bağımsız bir ay adı olması durumunda şunları beklersiniz:

январь


RU yerel ayarı için doğru bir cevaptır. Android SDK'nın 'LLLL' özelliğini içermemesi çok garip.
Anfet

12

Joda-Zaman

Joda-Time kullanmaya ne dersiniz ? Bu, çalışmak için çok daha iyi bir tarih-saat API'sıdır (Ve JanuaryOcak 0-basedayı anlamına gelir. Aylarca dizini kullanan Takvim'e benzemez ).

AbstractDateTime#toString( pattern )Tarihi belirtilen formatta formatlamak için yöntemi kullanabilirsiniz :

DateTime date = DateTime.now();
String month = date.toString("MMM");

Numaradan Ay Adı

Belirli bir ay numarası için ay adı istiyorsanız, bunu şu şekilde yapabilirsiniz:

int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");

Yerelleştir

Yukarıdaki yaklaşım, ay adının dili için JVM'nizin mevcut varsayılan Yerel Ayarını kullanır. Bunun yerine bir Yerel Ayar nesnesi belirtmek istiyorsunuz.

String month = date.toString( "MMM", Locale.CANADA_FRENCH );

1
teşekkürler ama ben eski SimpleDateFormatveDate
ogzd ile mutluyum

@ogzd. Senin dileğin. Ama kesinlikle denemelisin ve eminim şarkı söylemeyi seveceksin.
Rohit Jain

@ogzd. Ay numarasından ay adını almanın yolunu gönderdim. BTW, neden bunu yapmak istersin?
Rohit Jain

10

Month::getDisplayName

Java 8'den beri, Monthnumaralandırmayı kullanın . getDisplayNameYöntem otomatik ayın adını lokalize.

Geçmek:

  • Bir TextStyle , ne kadar uzun veya ne kadar kısaltılacağını belirlemek için.
  • A Localeçeviride kullanılan insan dilini ve kısaltma, noktalama vb. İçin kullanılan kültürel normları belirtmek için.

Misal:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}

9

Bu eski bir soru olabilir, ancak endeksleri bildiğimizde ayın adını almak için tek satırlık olarak kullandım

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

veya kısa isimler için

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

monthNumberYukarıdaki yöntemlerden herhangi biri bir dizi döndürürken, 1'den itibaren saymaya başladığınızın farkında olun , bu nedenle 0'dan saymaya başlamanız gerekir.


4

Bu kodun dil desteği vardır. Bunları Android Uygulamasında kullanmıştım.

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...

1
Bu mükemmel çalışıyor, yorumlar biraz da tamamen yanlış
Иво Недев

3

Bunu çok daha kolay buldum ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )

private void getCalendarMonth(Date date) {      
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Month month = Month.of(calendar.get(Calendar.MONTH));       
    Locale locale = Locale.getDefault();
    System.out.println(month.getDisplayName(TextStyle.FULL, locale));
    System.out.println(month.getDisplayName(TextStyle.NARROW, locale));
    System.out.println(month.getDisplayName(TextStyle.SHORT, locale));
}

gelmez MonthOcak = 0 ile Takvim başlar oysa Ocak = 1 ile dizinini başlar? Month.of(calendar.get(Calendar.MONTH));Ocak durumunda başarısız olmaz mıydı ?
MCO

2

Şöyle bir satır alabilirsiniz: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]


2

Bu benim için çalışıyor:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

"September"Tek satırlık dönüşler için:

String month = getMonthName(9);

2

Tek yön:

Biz MonthJava API ( java.time.Month). Kullanarak alabilirizMonth.of(month);

Burada, Monthsayılar olarak dizine eklenir, böylece Month.JANUARYyukarıdaki API'de 1, 2, 3, 4 gibi bir dizin sağlayabilir veya sağlayabilirsiniz.

İkinci yol:

ZonedDateTime.now().getMonth();

Bu mevcuttur java.time.ZonedDateTime.


1

Bu konudaki yanıtlara göre bir kotlin uzantısı oluşturdum ve DateFormatSymbols yanıtlarını kullanarak yerelleştirilmiş bir yanıt alıyorsunuz.

fun Date.toCalendar(): Calendar {
    val calendar = Calendar.getInstance()
    calendar.time = this
    return calendar
}


fun Date.getMonthName(): String {
    val month = toCalendar()[Calendar.MONTH]
    val dfs = DateFormatSymbols()
    val months = dfs.months
    return months[month]
}

1

Bu benim için çalıştı

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());

1
Calender cal = Calendar.getInstance(Locale.ENGLISH)
String[] mons = new DateFormatSymbols(Locale.ENGLISH).getShortMonths();
int m = cal.get(Calendar.MONTH);
String mName = mons[m];

0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

1
Cevabınız doğru olsa da kalitesizdir. Lütfen bu cevabın neden doğru olduğunu açıklayın.
SubliemeSiem

1
@SubliemeSiem Sadece formatı değiştirmeye ve bunu yapmanın en basit yolunu değiştirmeye çalışıyorum: MM- 01, 02, 03 gibi bir tamsayı olarak ay adını döndürecek. MMM-ay adını jan, feb, mar gibi kısaca döndürecektir. MMMM-tam ay adını Ocak gibi dize biçiminde döndürecektir.
Amit Mishra

bu, tarihleri ​​biçimlendirmek için tek DOĞRU cevaptır. Bir Tarih veya Takvim nesnesi kullanın ve bir biçimlendiriciyle biçimlendirin. sorunun kendisi KÖTÜ
Mickey Perlstein

0

Ayın İngilizce adını döndürür. 04 NİSAN değerini döndürür ve böyle devam eder.

String englishMonth (int month){
        return Month.of(month);
    }

Basit ve doğrudan öneri, teşekkürler. Kodunuz derlenmiyor. Ya iade türünü beyan etmeniz ya da iade etmeden önce sonuca Monthbaşvurmanız toStringgerekir.
Ole VV

-3

SimpleDateFormat java belgesinden:

*         <td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
 *         <td><code>02001.July.04 AD 12:08 PM</code>
 *         <td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
 *         <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>

Sorulan sorunun nasıl yanıtlandığını göremiyorum.
jhpg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.