wake-up-neo.com

Zeit aus einem Date-Objekt entfernen?

Ich möchte Zeit von Date Objekt entfernen.

DateFormat df;
String date;
df = new SimpleDateFormat("dd/MM/yyyy");
d = eventList.get(0).getStartDate(); // I'm getting the date using this method
date = df.format(d); // Converting date in "dd/MM/yyyy" format

Wenn ich jedoch dieses Datum konvertiere (das im String-Format vorliegt), wird auch die Zeit angehängt.

Ich will überhaupt keine Zeit. Was ich will, ist einfach "21.03.2012".

56
Laxman Rana

Die schnelle Antwort lautet:

Nein, das darfst du nicht. Denn dafür verwendet Date.

Aus dem Javadoc von Date:

Die Klasse Date repräsentiert einen bestimmten Zeitpunkt mit einer Millisekundengenauigkeit.

Jedoch, da diese Klasse lediglich ein Datenobjekt ist. Es ist uns egal, wie wir es beschreiben. Wenn wir ein Datum 2012/01/01 12:05:10.321 sehen, können wir sagen, dass es 2012/01/01 ist, das ist, was Sie brauchen .

Beispiel 1: durch Manipulieren von String

Eingabezeichenfolge: 2012/01/20 12: 05: 10.321

Gewünschter Ausgabestring: 2012/01/20

Da yyyy/MM/dd genau das ist, was wir brauchen, können wir den String einfach manipulieren, um das Ergebnis zu erhalten.

String input = "2012/01/20 12:05:10.321";
String output = input.substring(0, 10);  // Output : 2012/01/20

Beispiel 2: von SimpleDateFormat

Eingabezeichenfolge: 2012/01/20 12: 05: 10.321

Gewünschter Ausgabestring: 20.01.2012

In diesem Fall wollen wir ein anderes Format.

String input = "2012/01/20 12:05:10.321";
DateFormat inputFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = inputFormatter.parse(input);

DateFormat outputFormatter = new SimpleDateFormat("MM/dd/yyyy");
String output = outputFormatter.format(date); // Output : 01/20/2012

Für die Verwendung von SimpleDateFormat überprüfen Sie SimpleDateFormat JavaDoc .

41
Rangi Lin

Sie können den Zeitteil aus Java.util.Date entfernen, indem Sie die Stunden, Minuten, Sekunden und Millisekunden auf Null setzen.

import Java.util.Calendar;
import Java.util.Date;

public class DateUtil {

    public static Date removeTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

}
104
Sunil Manheri

Apache Commons DateUtils hat eine "abgeschnittene" - Methode, die ich gerade gemacht habe, um dies zu tun, und ich denke, es wird Ihre Bedürfnisse erfüllen. Es ist wirklich einfach zu bedienen:

DateUtils.truncate(dateYouWantToTruncate, Calendar.DAY_OF_MONTH);

DateUtils hat auch eine Reihe anderer cooler Hilfsprogramme wie "isSameDay ()" und dergleichen. Schau es dir an! Es könnte Ihnen die Sache erleichtern.

27
jseals

Was ist mit diesem:

    Date today = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

    today = sdf.parse(sdf.format(today));
12
user2859573

Was Sie wollen, ist unmöglich.

Ein Date-Objekt steht für einen "absoluten" Zeitpunkt. Sie können den Zeitteil nicht daraus entfernen. Wenn Sie ein Date-Objekt direkt mit System.out.println(date) drucken, wird es immer in einem Standardformat formatiert, das die Uhrzeit enthält. Sie können nichts dagegen tun.

Anstatt irgendwie zu versuchen, die Klasse Date für etwas zu verwenden, für das sie nicht entwickelt wurde, sollten Sie nach einer anderen Lösung suchen. Verwenden Sie beispielsweise SimpleDateFormat, um das Datum in einem beliebigen Format zu formatieren.

Die Java-Datums- und Kalender-APIs sind leider nicht die am besten konzipierten Klassen der Standard-Java-API. Es gibt eine Bibliothek namens Joda-Time , die eine viel bessere und leistungsfähigere API hat.

Joda-Time bietet eine Reihe spezieller Klassen zur Unterstützung von Datumsangaben, Zeiten, Zeiträumen, Dauern usw. Wenn Sie nur mit einem Datum ohne Uhrzeit arbeiten möchten, wäre die Klasse Joda-Time LocalDate genau das, was Sie tun würden benutzen.

8
Jesper

sie könnten so etwas versuchen:

import Java.text.*;
import Java.util.*;
public class DtTime {
public static void main(String args[]) {
String s;
Format formatter;
  Date date = new Date();
  formatter = new SimpleDateFormat("dd/MM/yyyy");
  s = formatter.format(date);
  System.out.println(s);
    }
}

Dadurch erhalten Sie die Ausgabe als 21/03/2012.

Oder Sie können dies versuchen, wenn Sie die Ausgabe als 21 Mar, 2012 möchten.

import Java.text.*;
import Java.util.*;
public class DtTime {
public static void main(String args[]) {
    Date date=new Date();
String df=DateFormat.getDateInstance().format(date);
System.out.println(df);
    }
}
3
heretolearn

Möglicherweise hilft der folgende Code Menschen, die nach zeroHour des Tages suchen:

    Date todayDate = new Date();
    GregorianCalendar todayDate_G = new GregorianCalendar();
    gcd.setTime(currentDate);
    int _Day    = todayDate_GC.get(GregorianCalendar.DAY_OF_MONTH);
    int _Month  = todayDate_GC.get(GregorianCalendar.MONTH);
    int _Year   = todayDate_GC.get(GregorianCalendar.YEAR);

    GregorianCalendar newDate = new GregorianCalendar(_Year,_Month,_Day,0,0,0);
    zeroHourDate = newDate.getTime();
    long zeroHourDateTime = newDate.getTimeInMillis();

Hoffe das wird hilfreich sein.

3
Kris_P

Sie können das zum Beispiel schreiben:

private Date TruncarFecha(Date fechaParametro) throws ParseException {
    String fecha="";
    DateFormat outputFormatter = new SimpleDateFormat("MM/dd/yyyy");
    fecha =outputFormatter.format(fechaParametro);
    return outputFormatter.parse(fecha);
}
Date dateWithoutTime =
    new Date(myDate.getYear(),myDate.getMonth(),myDate.getDate()) 

Dies ist veraltet, aber der schnellste Weg, dies zu tun.

2
Daniel

Ein bisschen Fudge, aber Sie könnten Java.sql.Date verwenden. Dies speichert nur den Datumsteil und die Nullzeit (Mitternacht).

Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2011);
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 5);
Java.sql.Date d = new Java.sql.Date(c.getTimeInMillis());
System.out.println("date is  " + d);
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
System.out.println("formatted date is  " + df.format(d));

gibt

date is  2011-12-05
formatted date is  05/12/2011

Oder es lohnt sich, ein eigenes Datumsobjekt zu erstellen, das nur Datumsangaben und keine Zeitangaben enthält. Dies könnte Java.util.Date einschließen und die Zeitteile davon ignorieren.

1
RNJ

Die richtige Klasse für ein Datum ohne Tageszeit ist LocalDate. LocalDate ist Teil von Java.time, der modernen Java-API für Datum und Uhrzeit.

Das Beste, was Sie tun können, ist, wenn Sie die getStartDate-Methode, die Sie verwenden, ändern können, um eine LocalDate-Anweisung zurückzugeben:

    DateTimeFormatter dateFormatter = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(Locale.forLanguageTag("en-IE"));

    LocalDate d = eventList.get(0).getStartDate(); // We’re now getting a LocalDate using this method
    String dateString = d.format(dateFormatter);
    System.out.println(dateString);

Beispielausgabe:

21.03.2012

Wenn Sie getStartDate nicht ändern können, können Sie möglicherweise immer noch eine neue Methode hinzufügen, die den gewünschten Typ zurückgibt. Wenn Sie sich dies jedoch gerade nicht leisten können, konvertieren Sie das altmodische Date, das Sie erhalten (ich nehme an, Java.util.Date):

    d = eventList.get(0).getStartDate(); // I'm getting the old-fashioned Date using this method
    LocalDate dateWithoutTime = d.toInstant()
            .atZone(ZoneId.of("Asia/Kolkata"))
            .toLocalDate();

Bitte geben Sie die Zeitzone ein, die für die Date angenommen wurde. Sie können ZoneId.systemDefault() für die Zeitzoneneinstellung der JVM verwenden. Nur diese Einstellung kann jederzeit von anderen Programmteilen oder anderen Programmen, die in derselben JVM ausgeführt werden, geändert werden.

Die Java.util.Date-Klasse war das, was wir alle verwendeten, als diese Frage vor 6 Jahren gestellt wurde (nein, nicht alle; ich war und wir waren viele). Java.time kam einige Jahre später heraus und hat die alten Date, Calendar, SimpleDateFormat und DateFormat ersetzt. Sie erkannten, dass sie schlecht gestaltet waren. Außerdem kann eine Date trotz ihres Namens kein Datum darstellen. Es ist ein Zeitpunkt. Bei den anderen Antworten wird die Uhrzeit bis zum Beginn des Tages ("Mitternacht") in der Standardzeitzone der JVM abgerundet. Die Uhrzeit wird nicht entfernt, sondern nur auf 00:00 gesetzt. Ändern Sie Ihre Standardzeitzone - wie gesagt, selbst ein anderes Programm, das in derselben JVM ausgeführt wird, kann dies jederzeit ohne Vorankündigung tun - und alles bricht (oft).

Link:Oracle-Lernprogramm: Date Time Erläuterung der Verwendung von Java.time.

1
Ole V.V.

Wenn Sie Java 8+ verwenden, verwenden Sie stattdessen den Typ Java.time.LocalDate .

LocalDate now = LocalDate.now();
System.out.println(now.toString());

Die Ausgabe:

2019-05-30

https://docs.Oracle.com/javase/8/docs/api/Java/time/LocalDate.html

1
Amy Doxy

Java.util.Date steht für ein Datum/Uhrzeit bis zu Millisekunden. Sie haben keine andere Wahl, als eine Zeit mit einzubeziehen. Sie könnten versuchen, die Zeit auf Null zu stellen, aber dann werden Zeitzonen und Sommerzeit ins Spiel kommen - und das kann alles in die Quere kommen (e.g. 21/03/2012 0:00 GMT is 20/03/2012 PDT).

Sie möchten möglicherweise einen Java.sql.Date, der nur den Datumsteil darstellt (obwohl intern immer noch ms verwendet wird).

1
ɲeuroburɳ

Sie können den Zeitabschnitt des Datums und des Formats im Muster "dd/mm/yyyy" auch manuell entsprechend Ihrer Anforderungen ändern.

  public static Date getZeroTimeDate(Date changeDate){

        Date returnDate=new Date(changeDate.getTime()-(24*60*60*1000));
        return returnDate;
    }

Wenn der Rückgabewert nicht funktioniert, überprüfen Sie den Kontextparameter in web.xml .

   <context-param> 
        <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
        <param-value>true</param-value>
    </context-param>
0
Rajesh

Eine andere Möglichkeit, hier zu trainieren, ist die Verwendung von Java.sql.Date, da sql Date keine Zeit zugeordnet ist, wohingegen Java.util.Date immer einen Zeitstempel ..__ hat erweitert Java.util.Date, daher kann die Java.util.Date-Variable eine Referenz auf Java.sql.Date (ohne Zeit) und natürlich auf Java.util.Date (mit Zeitstempel) sein.

0
Sourav
String substring(int startIndex, int endIndex)

Mit anderen Worten, Sie wissen, dass Ihre Zeichenfolge 10 Zeichen lang ist.

FinalDate = date.substring(0,9);
0
Jeremy Sayers

Zusätzlich zu dem, was @jseals bereits gesagt hat. Ich denke, die Klasse org.Apache.commons.lang.time.DateUtils ist wahrscheinlich das, worauf Sie achten sollten.

Es ist eine Methode: Abschneiden (Datum, int Feld) hat für mich sehr gut funktioniert.

JavaDocs: https://commons.Apache.org/proper/commons-lang/javadocs/api-2.6/org/Apache/commons/lang/time/DateUtils.html#truncate(Java.util.Date int)

Da Sie alle Zeitfelder abschneiden mussten, können Sie Folgendes verwenden:

DateUtils.truncate(new Date(),Calendar.DAY_OF_MONTH)
0
Sahil J

Ich kann nicht glauben, dass niemand diese beschissene Antwort mit allen anderen gab. Es ist seit Jahrzehnten veraltet.

@SuppressWarnings("deprecation")
...
    Date hitDate = new Date();
    hitDate.setHours(0);
    hitDate.setMinutes(0);
    hitDate.setSeconds(0);
0
Chloe