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

Получить значение дня месяца из объекта Date в Android?

Используя этот код:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse(dtStart);
return date;

Я преобразовал String Date by Date Object и получил значение:

Вс 17 февраля 07:00:00 мск 2013

Теперь я хочу извлечь день (воскресенье/понедельник) и месяц отсюда.

4b9b3361

Ответ 1

import android.text.format.DateFormat;

String dayOfTheWeek = (String) DateFormat.format("EEEE", date); // Thursday
String day          = (String) DateFormat.format("dd",   date); // 20
String monthString  = (String) DateFormat.format("MMM",  date); // Jun
String monthNumber  = (String) DateFormat.format("MM",   date); // 06
String year         = (String) DateFormat.format("yyyy", date); // 2013

Ответ 2

Вы можете попробовать:

String input_date="01/08/2012";
SimpleDateFormat format1=new SimpleDateFormat("dd/MM/yyyy");
Date dt1=format1.parse(input_date);
DateFormat format2=new SimpleDateFormat("EEEE"); 
String finalDay=format2.format(dt1);

Также попробуйте следующее:

Calendar c = Calendar.getInstance();
c.setTime(yourDate);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

Ответ 3

в пользовательские дни недели вы можете использовать эту функцию

public static String getDayFromDateString(String stringDate,String dateTimeFormat)
{
    String[] daysArray = new String[] {"saturday","sunday","monday","tuesday","wednesday","thursday","friday"};
    String day = "";

    int dayOfWeek =0;
    //dateTimeFormat = yyyy-MM-dd HH:mm:ss
    SimpleDateFormat formatter = new SimpleDateFormat(dateTimeFormat);
    Date date;
    try {
        date = formatter.parse(stringDate);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        dayOfWeek = c.get(Calendar.DAY_OF_WEEK)-1;
        if (dayOfWeek < 0) {
            dayOfWeek += 7;
        }
        day = daysArray[dayOfWeek];
    } catch (Exception e) {
        e.printStackTrace();
    }

    return day;
}

dateTimeFormat, например dateTimeFormat = "yyyy-MM-dd HH: mm: ss";

Ответ 4

ТЛ; др

Если ваша дата и время были предназначены для UTC:

LocalDateTime               // Represent a date and time-of-day lacking the context of a time zone or offset-from-UTC. Does *NOT* represent a moment.
.parse(                     // Convert from text to a date-time object.
    "2013-02-17 07:00:00" 
    .replace( " " , "T" )   // Comply with standard ISO 8601 format.
)                           // Returns a 'LocalDateTime' object.
.atOffset(                  // Determining a moment by assign an offset-from-UTC. Do this only if you are certain the date and time-of-day were intended for this offset.
    ZoneOffset.UTC          // An offset of zero means UTC itself.
)                           // Returns a 'OffsetDateTime' object. Represents a moment.
.getDayOfWeek()             // Extract the day-of-week enum object.
.getDisplayName(            // Localize, producing text. 
    TextStyle.FULL ,        // Specify how long or abbreviated.
    Locale.US               // Specify language and cultural norms to use in localization.
)                           // Returns a 'String' object.

Воскресенье

А также…

…
.getMonth()
.getDisplayName( TextStyle.FULL , Locale.US )

февраль

java.time

Современное решение использует классы java.time, которые много лет назад вытеснили ужасные старые классы даты и времени, такие как Date & SimpleDateFormat.

Часовой пояс

Ваш код игнорирует критическую проблему часового пояса. Когда вы опускаете конкретную зону или смещение от UTC, текущий часовой пояс JVM по умолчанию применяется неявно. Так что ваши результаты могут отличаться.

Вместо этого всегда указывайте часовой пояс или смещение явно в своем коде.

LocalDateTime

В вашем формате ввода ГГГГ-ММ-ДД ЧЧ: ММ: СС отсутствует индикатор часового пояса или смещения от UTC.

Таким образом, мы должны проанализировать как LocalDateTime.

Ваш формат ввода близок к стандартному формату ISO 8601, используемому по умолчанию в классе LocalDateTime. Просто замените ПРОБЕЛ в середине буквой T

String input = "2013-02-17 07:00:00".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;

ldt.toString(): 2013-02-17T07: 00

LocalDateTime вас сейчас есть, не представляет момент, не является точкой на временной шкале. Умышленное отсутствие часового пояса или смещения означает, что он по определению не может представлять момент. LocalDateTime представляет потенциальные моменты в диапазоне около 26-27 часов, диапазон часовых поясов по всему миру.

ZonedDateTime

Если вы точно знаете часовой пояс, предназначенный для этой даты и времени, примените ZoneId чтобы получить ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;

С ZonedDateTime вас есть момент.

Получите день недели, используя перечисление DayOfWeek.

DayOfWeek dow = zdt.getDayOfWeek() ;

Метод DayOfWeek::getDisplayName переводит название дня на любой человеческий язык, указанный в Locale например Locale.US или Locale.CANADA_FRENCH.

String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ); 

Dimanche

Или в американском английском.

String output = dow.getDisplayName( TextStyle.FULL , Locale.US ); 

Воскресенье

Аналогично для месяца, используйте перечисление Month.

Month m = zdt.getMonth() ;

String output = m.getDisplayName( TextStyle.FULL , Locale.US ); 

февраль

OffsetDateTime

Если вы точно знаете, что дата и время суток в LocalDateTime должны были представлять момент в UTC, используйте класс OffsetDateTime.

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;  // Assign UTC (an offset of zero hours-minutes-seconds). 

MonthDay

Вас также может заинтересовать класс MonthDay если вы хотите работать без дня и месяца.

MonthDay md = MonthDay.from( zdt ) ;

О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, и SimpleDateFormat.

Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.

Чтобы узнать больше, смотрите Oracle Tutorial. И поиск для многих примеров и объяснений. Спецификация JSR 310.

Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*.

Где взять классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и другие.

Ответ 5

public static String getDayFromStringDate(String stringDate, String dateFormat, boolean abbreviated) throws ParseException {

    String pattern;

    if (abbreviated) {

        pattern = "E"; // For short day eg: Mon,Tue
    } else {

        pattern = "EEEE"; // For compete day eg: Monday, Tuesday
    }

    return new SimpleDateFormat(pattern)
            .format(new SimpleDateFormat(dateFormat).parse(stringDate));
}

Например: если stringDate: - 16/12/2018, тогда dateFormat: - dd/MM/гггг

Ответ 6

Попробуйте использовать класс java.util.Calendar.

String dateString = "20/12/2018";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

Date readDate = df.parse(dateString);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(readDate.getTime());

Log.d(TAG, "Year: "+cal.get(Calendar.YEAR));
Log.d(TAG, "Month: "+cal.get(Calendar.MONTH));
Log.d(TAG, "Day: "+cal.get(Calendar.DAY_OF_MONTH));