C'è un oneliner per ottenere il nome del mese quando lo sappiamo int monthNumber = calendar.get(Calendar.MONTH)
? O qual è il modo più semplice?
C'è un oneliner per ottenere il nome del mese quando lo sappiamo int monthNumber = calendar.get(Calendar.MONTH)
? O qual è il modo più semplice?
Risposte:
Otterrai anche in questo modo.
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;
}
puoi ottenerlo utilizzando SimpleDateFormat , che ha lo scopo di formattare la data e l'ora.
Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
Semplice come questo
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
октября
invece di Октябрь
, cosa che probabilmente ti aspetti.
Questa è la soluzione che ho trovato per un progetto di classe:
public static String theMonth(int month){
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
Il numero che inserisci proviene da una Calendar.MONTH
chiamata.
new SimpleDateFormat("MMMM").format(cal.getTime());
se si dispone di un'interfaccia multilingue, è possibile utilizzare getDisplayName per visualizzare il nome del mese con il controllo della lingua di visualizzazione.
ecco un esempio di visualizzazione del nome del mese in inglese, francese, arabo e arabo in un paese specifico come "Siria":
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());
il risultato è:
January
janvier
يناير
كانون الثاني
Sat Jan 17 19:31:30 EET 2015
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
Per alcune lingue (ad esempio il russo) questo è l'unico modo corretto per ottenere i nomi dei mesi indipendenti.
Questo è ciò che ottieni, se usi getDisplayName
da Calendar
o DateFormatSymbols
per gennaio:
января (che è corretto per una stringa di data completa: " 10 января, 2014 ")
ma nel caso di un nome di mese autonomo ti aspetteresti:
январь
Che ne dici di usare Joda-Time . È un'API data-ora di gran lunga migliore con cui lavorare (e January
qui significa gennaio. Non è come Calendar, che utilizza l' 0-based
indice per mesi).
È possibile utilizzare il AbstractDateTime#toString( pattern )
metodo per formattare la data nel formato specificato:
DateTime date = DateTime.now();
String month = date.toString("MMM");
Se desideri il nome del mese per un determinato numero di mese, puoi farlo in questo modo:
int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");
L'approccio precedente utilizza le impostazioni internazionali predefinite correnti della JVM per la lingua del nome del mese. Si desidera invece specificare un oggetto Locale.
String month = date.toString( "MMM", Locale.CANADA_FRENCH );
SimpleDateFormat
eDate
Month::getDisplayName
A partire da Java 8, usa Month
enum. Il getDisplayName
metodo localizza automaticamente il nome del mese.
Passaggio:
TextStyle
per determinare quanto tempo o quanto abbreviato.Locale
per specificare la lingua umana utilizzata nella traduzione e le norme culturali utilizzate per l'abbreviazione, la punteggiatura, ecc.Esempio:
public static String getMonthStandaloneName(Month month) {
return month.getDisplayName(
TextStyle.FULL_STANDALONE,
Locale.getDefault()
);
}
Potrebbe essere una vecchia domanda, ma come una riga per ottenere il nome del mese in cui conosciamo gli indici, ho usato
String month = new DateFormatSymbols().getMonths()[monthNumber - 1];
o per nomi brevi
String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];
Tieni presente che monthNumber
inizi a contare da 1 mentre uno dei metodi sopra restituisce un array, quindi devi iniziare a contare da 0.
Questo codice supporta la lingua. Li avevo usati nell'app Android.
String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,...
String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
L'ho trovato molto più semplice ( 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
inizia il suo indice con gennaio = 1, mentre il calendario inizia con gennaio = 0? Non Month.of(calendar.get(Calendar.MONTH));
fallirebbe nel caso di gennaio?
Senso unico:
Abbiamo Month
API in Java ( java.time.Month
). Possiamo ottenere usandoMonth.of(month);
Qui, Month
sono indicizzati come numeri, quindi puoi fornire Month.JANUARY
o fornire un indice nell'API sopra come 1, 2, 3, 4.
Secondo modo:
ZonedDateTime.now().getMonth();
Questo è disponibile in java.time.ZonedDateTime
.
Ho creato un'estensione kotlin basata sulle risposte in questo argomento e utilizzando le risposte DateFormatSymbols ottieni una risposta localizzata.
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]
}
Questo ha funzionato per me
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));
Restituisce il nome inglese del mese. 04 ritorna APRILE e così via.
String englishMonth (int month){
return Month.of(month);
}
Month
o applicarlo toString
al risultato prima di restituirlo.
dal documento java SimpleDateFormat:
* <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>