webentwicklung-frage-antwort-db.com.de

Wert des Tagesmonats von Datumsobjekt in Android abrufen?

Mit diesem Code:

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

Ich habe das String Date by Date-Objekt konvertiert und den Wert erhalten ... ------> So 17. Feb 07:00:00 GMT 2013 <------------- -

Jetzt möchte ich Tag (Sonntag/Montag) und Monat hier auslesen.

32
NRahman
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
140
Pankaj Kumar

Du kannst es versuchen:

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);

Versuchen Sie auch folgendes:

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

zu benutzerdefinierten Wochentagen können Sie diese Funktion verwenden 

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 zum Beispiel dateTimeFormat = "jjjj-MM-tt HH: mm: ss";

tl; dr

Wenn Datum und Uhrzeit auf UTC eingestellt waren:

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.

Sonntag

Und…

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

Februar

Java.time

Die moderne Lösung verwendet die Java.time Klassen, die vor Jahren die schrecklichen alten Datum-Zeit-Klassen wie Date & SimpleDateFormat abgelöst haben.

Zeitzone

Ihr Code ignoriert das entscheidende Problem der Zeitzone. Wenn Sie eine bestimmte Zone oder einen Versatz von UTC weglassen, wird die aktuelle Standardzeitzone der JVM implizit angewendet. Daher können Ihre Ergebnisse variieren.

Geben Sie stattdessen immer eine Zeitzone oder einen Versatz explizit in Ihrem Code an.

LocalDateTime

In Ihrem Eingabeformat JJJJ-MM-TT HH: MM: SS fehlt ein Indikator für die Zeitzone oder den Versatz von UTC.

Also müssen wir als LocalDateTime analysieren.

Ihr Eingabeformat entspricht in etwa dem Standardformat ISO 8601, das standardmäßig in der Klasse LocalDateTime verwendet wird. Ersetzen Sie einfach das Leerzeichen in der Mitte durch ein T.

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

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

Das LocalDateTime, das Sie jetzt in der Hand haben, stellt keinen Moment dar, ist kein Punkt auf der Zeitachse. Wenn eine Zeitzone oder ein Versatz absichtlich fehlt, kann sie per Definition keinen Moment darstellen. Ein LocalDateTime repräsentiert mögliche Momente in einem Bereich von etwa 26 bis 27 Stunden, dem Bereich der Zeitzonen rund um den Globus.

ZonedDateTime

Wenn Sie eine bestimmte Zeitzone kennen, die für dieses Datum und diese Uhrzeit vorgesehen ist, wenden Sie ein ZoneId an, um ein ZonedDateTime zu erhalten.

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

Mit einem ZonedDateTime haben Sie jetzt einen Moment Zeit.

Ermitteln Sie den Wochentag mit der Enumeration DayOfWeek .

DayOfWeek dow = zdt.getDayOfWeek() ;

Das DayOfWeek::getDisplayName Methode übersetzt den Namen des Tages in jede menschliche Sprache, die durch Locale wie Locale.US oder Locale.CANADA_FRENCH .

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

dimanche

Oder in US-Englisch.

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

Sonntag

Ähnliches für Monat, benutze Month enum.

Month m = zdt.getMonth() ;

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

Februar

OffsetDateTime

Wenn Sie sicher wissen, dass Datum und Uhrzeit in der Klasse LocalDateTime einen Moment in UTC darstellen sollen, verwenden Sie die Klasse OffsetDateTime.

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

MonthDay

Sie könnten auch an der Klasse MonthDay interessiert sein, wenn Sie mit einem Tag und einem Monat ohne Jahr arbeiten möchten.

MonthDay md = MonthDay.from( zdt ) ;

Über Java.time

Das Java.time Framework ist in Java 8 und höher eingebaut. Diese Klassen verdrängen das lästige alte legacy Datum/Uhrzeit-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Projekt Joda-Time , das sich jetzt im Wartungsmodus befindet, rät zur Migration auf Java.time = Klassen.

Weitere Informationen finden Sie im Oracle Tutorial . Durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 31 .

Sie können Java.time Objekte direkt mit Ihrer Datenbank austauschen. Verwenden Sie einen JDBC-Treiber , der JDBC 4.2 oder höher entspricht. Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für Java.sql.* Klassen.

Woher bekommen Sie die Java.time-Klassen?

Das Projekt ThreeTen-Extra erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von Java.time. Hier finden Sie möglicherweise einige nützliche Klassen wie Interval , YearWeek , YearQuarter , und mehr .

2
Basil Bourque

Erwägen Sie die Verwendung der Java.util.Calendar-Klasse.

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));
0
Slim89
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));
}

ZB: wenn String Datum: - 16/12/2018 das Datum Format: - TT/MM/JJJJ

0
Pranav V R