Подтвердить что ты не робот

Найдите имя дня, месяца и дня

Если у меня есть int year, int month, int day в Java, как найти имя дня? Есть ли уже некоторые функции для этого?

4b9b3361

Ответ 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