Если у меня есть int year, int month, int day в Java, как найти имя дня? Есть ли уже некоторые функции для этого?
Найдите имя дня, месяца и дня
Ответ 1
Используйте SimpleDateFormat
с рисунком EEEE
, чтобы получить имя дня недели.
// Assuming that you already have this.
int year = 2011;
int month = 7;
int day = 22;
// First convert to Date. This is one of the many ways.
String dateString = String.format("%d-%d-%d", year, month, day);
Date date = new SimpleDateFormat("yyyy-M-d").parse(dateString);
// Then get the day of week from the Date based on specific locale.
String dayOfWeek = new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date);
System.out.println(dayOfWeek); // Friday
Здесь он завернут все в хороший класс Java для вас.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtility
{
public static void main(String args[]){
System.out.println(dayName("2015-03-05 00:00:00", "YYYY-MM-DD HH:MM:ss"));
}
public static String dayName(String inputDate, String format){
Date date = null;
try {
date = new SimpleDateFormat(format).parse(inputDate);
} catch (ParseException e) {
e.printStackTrace();
}
return new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date);
}
}
Ответ 2
Вы можете сделать что-то вроде this, чтобы получить имена дней недели для разных мест.
Здесь важная часть:
DateFormatSymbols dfs = new DateFormatSymbols(usersLocale);
String weekdays[] = dfs.getWeekdays();
Это можно сочетать с этим:
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_WEEK);
Чтобы получить то, что вы ищете:
String nameOfDay = weekdays[day];
Ответ 3
Название дня недели отличается по языку. Таким образом, вы должны использовать DateFormat
с правильной локалью. Например:
SimpleDateFormat format = new SimpleDateFormat("EEEE");
System.out.println(format.format(date));
Объект Date
может быть получен несколькими способами, включая устаревший конструктор Date(..)
, методы Calendar.set(..)
или joda-time DateTime
. (для последнего вы можете использовать joda-time собственный DateTimeFormat
)
Ответ 4
Создайте gregorianCalendar с годом, месяцем и днем, затем запросите его, чтобы найти имя дня. Что-то вроде этого:
int year = 1977;
int month = 2;
int dayOfMonth = 15;
Calendar myCalendar = new GregorianCalendar(year, month, dayOfMonth);
int dayOfWeek = myCalendar.get(Calendar.DAY_OF_WEEK);
Обратите внимание, что день недели возвращается как int, представляющий порядковый номер дня в представлении дня недели локали. IE, в локали, где будний день начинается в понедельник и заканчивается в воскресенье, второй будет представлять вторник, тогда как если будний день недели начнется в воскресенье, то тот же самый 2 будет представлять понедельник.
Edit
И так как есть много ответов на редактирование, позвольте мне добавить следующее:
DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault());
String dayOfMonthStr = symbols.getWeekdays()[dayOfMonth];
Мысль быть честным, мне нравится подход SimpleDateFormatter лучше, потому что он инкапсулирует тот же самый код, что и выше. Глупо меня забыть обо всем этом.
Ответ 5
Вы можете использовать Calendar Объект, чтобы найти это.
Как только вы создадите экземпляр календаря, вы получите DAY_OF_WEEK (который является int), после чего вы можете найти день оттуда)
Вы можете использовать оператор switch так::
import java.util.*;
public class DayOfWeek {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_WEEK);
System.out.print("Today is ");
switch (day) {
case 1:
System.out.print("Sunday");
break;
case 2:
System.out.print("Monday");
break;
case 3:
System.out.print("Tuesday");
break;
case 4:
System.out.print("Wednesday");
break;
case 5:
System.out.print("Thursday");
break;
case 6:
System.out.print("Friday");
break;
case 7:
System.out.print("Saturday");
}
System.out.print(".");
}
}
Ответ 6
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 22); //Set Day of the Month, 1..31
cal.set(Calendar.MONTH,6); //Set month, starts with JANUARY = 0
cal.set(Calendar.YEAR,2011); //Set year
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //Starts with Sunday, 6 = friday
Ответ 7
new GregorianCalendar().setTime(new Date()).get(DAY_OF_WEEK)
Это дает вам число, Calendar.SUNDAY == 1
, Calendar.MONDAY == 2
,...
Ответ 8
Да, но это довольно долгий процесс с JDK. JodaTime может быть лучшим выбором (я его не использовал).
Сначала вы получаете объект Calendar
, чтобы вы могли создать дату из дня/месяца/года/часовой зоны. Не используйте один из устаревших конструкторов Date
.
Затем получите объект Date
из этого календаря и передайте его в SimpleDateFormat
. Обратите внимание, что объекты формата не являются потокобезопасными.
// by default, this Calendar object will have the current timezone
Calendar cal = GregorianCalendar.getInstance();
cal.set(2011, 6, 22);
// this formatter will have the current locale
SimpleDateFormat format = new SimpleDateFormat("EEEE");
System.out.println(format.format(cal.getTime()));
Ответ 9
Этот вид работы с датами проще при использовании библиотеки Joda-Time. Простой однострочный.
String dayOfWeek = new LocalDate( 2014, 1, 2 ).dayOfWeek().getAsText( java.util.Locale.ENGLISH );
System.out.println( "dayOfWeek: " + dayOfWeek );
При запуске...
dayOfWeek: Thursday