Czy istnieje oneliner, w którym można znaleźć nazwę miesiąca, o którym wiemy
int monthNumber = calendar.get(Calendar.MONTH)
Albo jaki jest najłatwiejszy sposób?
Czy istnieje oneliner, w którym można znaleźć nazwę miesiąca, o którym wiemy
int monthNumber = calendar.get(Calendar.MONTH)
Albo jaki jest najłatwiejszy sposób?
Odpowiedzi:
W ten sposób też otrzymasz.
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;
}
można to osiągnąć za pomocą SimpleDateFormat , który służy do formatowania daty i czasu.
Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
Tak proste
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
октября
zamiast Октябрь
, czego prawdopodobnie się spodziewasz.
Oto rozwiązanie, które wymyśliłem dla projektu klasowego:
public static String theMonth(int month){
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
Podany numer pochodzi z Calendar.MONTH
połączenia.
new SimpleDateFormat("MMMM").format(cal.getTime());
jeśli masz interfejs wielojęzyczny, możesz użyć getDisplayName do wyświetlenia nazwy miesiąca z kontrolą języka wyświetlania.
oto przykład wyświetlania nazwy miesiąca w języku angielskim, frensh, arabskim i arabskim w określonym kraju, takim jak „Syria”:
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());
wynik to:
January
janvier
يناير
كانون الثاني
Sat Jan 17 19:31:30 EET 2015
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
W przypadku niektórych języków (np. Rosyjskiego) jest to jedyny poprawny sposób uzyskania samodzielnych nazw miesięcy.
Oto, co otrzymujesz, jeśli używasz getDisplayName
od stycznia Calendar
lub DateFormatSymbols
w styczniu:
января (co jest poprawne w przypadku pełnego ciągu daty: „ 10 января, 2014 ”)
ale w przypadku samodzielnej nazwy miesiąca można się spodziewać:
январь
Co powiesz na używanie Joda-Time . Jest to znacznie lepsze API do pracy z datą i czasem (I January
oznacza tutaj styczeń. To nie jest jak Kalendarz, który używa 0-based
indeksu przez miesiące).
Możesz użyć AbstractDateTime#toString( pattern )
metody, aby sformatować datę w określonym formacie:
DateTime date = DateTime.now();
String month = date.toString("MMM");
Jeśli chcesz podać nazwę miesiąca dla konkretnego numeru miesiąca, możesz to zrobić w następujący sposób:
int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");
Powyższe podejście wykorzystuje bieżące domyślne ustawienia regionalne maszyny JVM dla języka nazwy miesiąca. Zamiast tego chcesz określić obiekt Locale.
String month = date.toString( "MMM", Locale.CANADA_FRENCH );
SimpleDateFormat
iDate
Month::getDisplayName
Od wersji Java 8 użyj Month
enum. PlikgetDisplayName
Metoda automatycznie lokalizuje nazwę miesiąca.
Przechodzić:
TextStyle
aby określić, jak długo lub w jakim skrócie.Locale
celu określenia ludzkiego języka używanego w tłumaczeniu oraz norm kulturowych używanych do skrótów, interpunkcji itp.Przykład:
public static String getMonthStandaloneName(Month month) {
return month.getDisplayName(
TextStyle.FULL_STANDALONE,
Locale.getDefault()
);
}
To może być stare pytanie, ale jako jeden liniowiec, aby uzyskać nazwę miesiąca, w którym znamy indeksy, użyłem
String month = new DateFormatSymbols().getMonths()[monthNumber - 1];
lub dla krótkich nazw
String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];
Pamiętaj, że Twój monthNumber
zaczynasz liczyć od 1, podczas gdy którakolwiek z powyższych metod zwraca tablicę, więc musisz zacząć liczyć od 0.
Ten kod obsługuje języki. Użyłem ich w aplikacji na Androida.
String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,...
String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
Znalazłem to znacznie łatwiej ( 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));
}
Month
zaczyna indeksu od stycznia = 1, podczas gdy kalendarz zaczyna się od stycznia = 0? Nie Month.of(calendar.get(Calendar.MONTH));
zawiódłby w przypadku stycznia?
Jednokierunkowa:
Mamy Month
API w Javie ( java.time.Month
). Możemy uzyskać, używającMonth.of(month);
Tutaj Month
są indeksowane jako liczby, więc możesz podać Month.JANUARY
indeks lub podać indeks w powyższym API, taki jak 1, 2, 3, 4.
Drugi sposób:
ZonedDateTime.now().getMonth();
Jest to dostępne w java.time.ZonedDateTime
.
Utworzyłem rozszerzenie kotlin na podstawie odpowiedzi w tym temacie i używając odpowiedzi DateFormatSymbols, otrzymujesz zlokalizowaną odpowiedź.
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]
}
To zadziałało dla mnie
import java.text.SimpleDateFormat;
import java.util.Calendar;
Calendar cal = Calendar.getInstance();
String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());
DateFormat date = new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
Zwraca angielską nazwę miesiąca. 04 zwraca APRIL i tak dalej.
String englishMonth (int month){
return Month.of(month);
}
Month
lub zastosować toString
się do wyniku przed jego zwróceniem.
z dokumentu SimpleDateFormat java:
* <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>