Existe um oneliner para obter o nome do mês quando sabemos int monthNumber = calendar.get(Calendar.MONTH)
? Ou qual é a maneira mais fácil?
Existe um oneliner para obter o nome do mês quando sabemos int monthNumber = calendar.get(Calendar.MONTH)
? Ou qual é a maneira mais fácil?
Respostas:
Você também vai conseguir assim.
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;
}
você pode obtê- lo usando SimpleDateFormat , que visa formatar datas e horas.
Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
Tão simples quanto isso
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
октября
vez de Октябрь
, o que você provavelmente espera.
Esta é a solução que encontrei para um projeto de classe:
public static String theMonth(int month){
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
O número que você passa vem de uma Calendar.MONTH
chamada.
new SimpleDateFormat("MMMM").format(cal.getTime());
se você tiver uma interface multilíngue, poderá usar getDisplayName para exibir o nome do mês com controle do idioma de exibição.
aqui está um exemplo de exibição do nome do mês em inglês, francês, árabe e árabe em um país específico, como "Síria":
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());
o resultado é:
January
janvier
يناير
كانون الثاني
Sat Jan 17 19:31:30 EET 2015
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
Para alguns idiomas (por exemplo, russo), esta é a única maneira correta de obter os nomes dos meses independentes.
Isso é o que você obtém, se usar getDisplayName
do Calendar
ouDateFormatSymbols
para janeiro:
января (que é correto para uma string de data completa: " 10 января, 2014 ")
mas no caso de um nome de mês independente, você esperaria:
январь
Que tal usar o Joda-Time . É uma API de data e hora muito melhor para trabalhar (e January
significa janeiro aqui. Não é como o Agenda, que usa0-based
índice por meses).
Você pode usar o AbstractDateTime#toString( pattern )
método para formatar a data no formato especificado:
DateTime date = DateTime.now();
String month = date.toString("MMM");
Se quiser o nome do mês para um determinado número de mês, você pode fazer assim:
int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");
A abordagem acima usa o Locale padrão atual da JVM para o idioma do nome do mês. Em vez disso, você deseja especificar um objeto Locale.
String month = date.toString( "MMM", Locale.CANADA_FRENCH );
SimpleDateFormat
eDate
Month::getDisplayName
Desde o Java 8, use o Month
enum. O getDisplayName
método localiza automaticamente o nome do mês.
Passar:
TextStyle
para determinar por quanto tempo ou abreviações.Locale
para especificar a linguagem humana usada na tradução e as normas culturais usadas para abreviações, pontuação, etc.Exemplo:
public static String getMonthStandaloneName(Month month) {
return month.getDisplayName(
TextStyle.FULL_STANDALONE,
Locale.getDefault()
);
}
Pode ser uma pergunta antiga, mas como uma linha para obter o nome do mês em que sabemos os índices, usei
String month = new DateFormatSymbols().getMonths()[monthNumber - 1];
ou para nomes curtos
String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];
monthNumber
Esteja ciente de que você começa a contar a partir de 1 enquanto qualquer um dos métodos acima retorna uma matriz, então você precisa começar a contar a partir de 0.
Este código possui suporte a idiomas. Eu os usei no aplicativo Android.
String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,...
String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
Achei muito mais fácil ( 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
inicia seu índice com janeiro = 1, enquanto o Calendário começa com janeiro = 0? Não Month.of(calendar.get(Calendar.MONTH));
falharia no caso de janeiro?
Mão única:
Temos Month
API em Java ( java.time.Month
). Podemos usarMonth.of(month);
Aqui, Month
são indexados como números, portanto, você pode fornecer por Month.JANUARY
ou fornecer um índice na API acima, como 1, 2, 3, 4.
Segunda forma:
ZonedDateTime.now().getMonth();
Disponível em java.time.ZonedDateTime
.
Criei uma extensão kotlin com base nas respostas deste tópico e, usando as respostas DateFormatSymbols, você obtém uma resposta localizada.
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]
}
Isso funcionou para mim
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));
Ele retorna o nome do mês em inglês. 04 retorna APRIL e assim por diante.
String englishMonth (int month){
return Month.of(month);
}
Month
ou aplicar toString
ao resultado antes de devolvê-lo.
do 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>