Rimozione di tempo da una Data oggetto?

Voglio togliere tempo da Date oggetto.

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

Ma quando sto convertendo a questa data (che è in String formato) si allegano tempo.

Non voglio che il tempo a tutti. Quello che voglio è semplicemente “21/03/2012”.

  • Cosa System.out.println(date) subito dopo l’ultima riga dire quindi? Sicuramente è già nel formato desiderato, giusto? Altrimenti non hai effettivamente inviato il codice completo. Per esempio, si potrebbe essere la conversione di Date oggetto dopo che vorresti ottenere l’intervallo di tempo predefinito.
  • Non si ottiene solo 21/03/2012 da date?
  • sì….esso è formato desiderato..ma quando di conversione stringa data in cui è appenda di tempo predefinito….che io non voglio…
  • leggi i miei commenti
  • Perché sei conversione di Date poi? 🙂 Come che senso ha? Il Date oggetto rappresenta l’epoca timestamp in millis e questo, naturalmente, comprende anche il tempo. Se il tuo unico scopo è quello di presentare agli esseri umani, solo la conversione di String nel formato desiderato, come hai già fatto. Hai solo bisogno di fare questo, esattamente nel momento in cui si sta andando a presentare agli esseri umani. Leggi il javadoc: docs.oracle.com/javase/7/docs/api/java/util/Date.html (in particolare anche l’ toString() metodo).
  • sì u r ri8…..ma voglio passare questa data in un metodo che accetta come argomento a una data non stringa…quindi per questo scopo voglio convertire in data…
  • Utilizzare LocalDate da java.time, il moderno Java data e l’ora di API. E ‘ una data senza tempo del giorno.

 

19 Replies
  1. 43

    La risposta più immediata è :

    No, non puoi farlo. Perché questo è ciò che Date utilizzare per.

    Da javadoc di Date :

    Classe Data rappresenta un determinato istante temporale, con precisione micrometrica.

    Tuttavia, dato che la classe è semplicemente un oggetto di dati. Esso dose, non si cura di come ci descrivono.
    Quando vediamo una data 2012/01/01 12:05:10.321, possiamo dire che è 2012/01/01, questo è ciò di cui avete bisogno.
    Ci sono molti modi per fare questo.

    Esempio 1 : attraverso la manipolazione di stringa

    Stringa di Input : 2012/01/20 12:05:10.321

    Desiderato stringa di output : 2012/01/20

    Dal formato yyyy/MM/dd sono esattamente ciò di cui abbiamo bisogno, possiamo semplicemente manipolare la stringa per ottenere il risultato.

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

    Esempio 2 : da SimpleDateFormat

    Stringa di Input : 2012/01/20 12:05:10.321

    Desiderato stringa di output : 01/20/2012

    In questo caso vogliamo un formato diverso.

    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

    Per l’utilizzo di SimpleDateFormat, controllare SimpleDateFormat JavaDoc.

    • desidera che l’uscita in data oggetto..non stringa….quando ho analizza Stringa di uscita in data oggetto si aggiungerà anche di tempo…che io non voglio……
    • Come ho detto, non puoi farlo, non è quello che Date è per. Devi cambiare il modo in cui si descrivono le Date, non cambia Date oggetto
    • Posso leggere java.di testo.DateFormat o android.di testo.formato.DateFormat ?
    • Non ho familiarità con android JDK, tuttavia credo che android hanno il loro modo per formattare una data.
    • Risposte come queste, dovrebbe essere rimosso il accettato di rispondere.
    • Come fare a capire?
    • Molto male la risposta. Rimuovere la volta della frazione di formattazione della stringa?

  2. 110

    È possibile rimuovere la parte da java.util.Data l’impostazione dell’ora, minuti, secondi e millisecondi a zero.

    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();
        }
    
    }
    • Questo non consente di rimuovere la parte del tempo, solo set a zero.
    • Volevo anche questa soluzione esatta. Grazie per la risposta.
    • ma se si vuole confrontare su data, questo funziona impostando ogni volta lo stesso.
    • Funziona qualunque sia il fuso orario? Se ci memorizzare una Data come questa in un fuso orario, ho paura che si potrebbe avere un’altra data (d+1, d-1) quando si applica questo metodo con un altro fuso orario… voglio solo lavorare con le date del calendario, come “aaaa-mm-gg”, c’è tempo. Sto iniziando a pensare che la “Stringa” è il più avanzato Classe per rappresentare una data di calendario in Java.
    • java.util.La data è il fuso orario indipendente. L’utilizzo di java.util.Calendario se si desidera utilizzare il fuso orario specifico di data/ora.
    • se non è affidabile, usato questo e i risultati non sono coerenti. spostato apache comunicazioni

  3. 34

    Apache Commons DateUtils ha un “truncate” metodo che ho usato per fare questo e penso che sarà soddisfare le vostre esigenze. E ‘ davvero facile da usare:

    DateUtils.truncate(dateYouWantToTruncate, Calendar.DAY_OF_MONTH);

    DateUtils ha anche una serie di altri interessanti programmi come “isSameDay()” e simili. Check it out e! Si potrebbe rendere le cose più facile per voi.

    • Non dovrebbe essere DateUtils.tronca(dateYouWantToTruncate, Calendario.Data); ?
    • Calendario.La DATA e il Calendario.GIORNO_DEL_MESE sono contrassegnati sinonimo in java doc.
  4. 12

    Che dire di questo:

        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    
        today = sdf.parse(sdf.format(today));
    • La conversione di una data in una Stringa e poi l’analisi di nuovo non è una buona soluzione quando c’è già la classe disponibile (Calendario) per modificare direttamente i componenti di data che si desidera.
  5. 8

    Quello che vuoi è impossibile.

    Un Date oggetto rappresenta un “assoluto” del momento. Non si può “rimuovere la parte” da esso. Quando si stampa un Date oggetto direttamente con System.out.println(date), sarà sempre formattato in un formato predefinito che include il tempo. Non c’è niente che tu possa fare per cambiare questa situazione.

    Invece, in qualche modo, cercando di usare la classe Date per qualcosa che non è stato progettato per, si dovrebbe cercare un’altra soluzione. Ad esempio, utilizzare SimpleDateFormat per formattare la data in qualsiasi formato desiderato.

    Java date e calendar Api, purtroppo, non sono più ben progettato classi standard di Java API. C’è una libreria che si chiama Joda Tempo che è molto meglio e più potente API.

    Joda Tempo ha un numero di classi speciali per sostenere le date, gli orari, i periodi, la durata, etc. Se si desidera lavorare con una data senza tempo, quindi Joda-il Tempo LocalDate classe a ciò che si desidera utilizzare.

  6. 5

    Può essere il codice di seguito possono aiutare le persone che sono alla ricerca di zeroHour del giorno :

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

    Spero che questo possa essere utile.

    • Posso capire la direzione di puntamento, e l’idea è buona, ma il codice non è chiaro e contiene un numero di errori. todayDate non viene utilizzato, né è todayDate_G (probabilmente misspelt) e todayDate_GC non è definito (probabilmente misspelt). Anche gcd non è definito.
  7. 3

    si può provare qualcosa di simile a questo:

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

    Questo vi darà un output come21/03/2012

    O si potrebbe provare questo se si desidera che l’output come 21 Mar, 2012

    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);
        }
    }
  8. 3

    Si può scrivere, per esempio:

    private Date TruncarFecha(Date fechaParametro) throws ParseException {
        String fecha="";
        DateFormat outputFormatter = new SimpleDateFormat("MM/dd/yyyy");
        fecha =outputFormatter.format(fechaParametro);
        return outputFormatter.parse(fecha);
    }
    • Benvenuti a Stack Overflow! Questa domanda è di tre anni e ha già accettato di rispondere. Si deve rispondere a più domande attuali.
  9. 2
    Date dateWithoutTime =
        new Date(myDate.getYear(),myDate.getMonth(),myDate.getDate()) 

    Questo è deprecato, ma il modo più veloce per farlo.

  10. 1

    Un po ‘ di fondente ma potete usare java.sql.Data. Questo memorizzato solo la parte di data e zero tempo (mezzanotte)

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

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

    O potrebbe essere la pena di creare il proprio data oggetto che contiene solo date e non volte. Questo potrebbe avvolgere java.util.Data e ignorare il tempo di parti di esso.

    • Utilizzando java.sql.Data permette di impostare l’ora del giorno, alle ore 00:00:00 (mezzanotte) per UTC/GMT. Quando tradotto per il proprio fuso orario, si otterrà un momento diverso della giornata (a meno che non si vive in Islanda). Quindi questa non è una buona soluzione.
    • buon punto @BasilBourque. Perché Islanda, nei tuoi commenti?
    • Islanda‘s fuso orario: UTC/GMT tutto l’anno, senza l’Ora legale (DST) sciocchezze. Un pratico sport se si utilizza Mac OS X o di altri Sistemi operativi che non facilmente consentono di impostare il server UTC/GMT come un fuso orario È possibile impostare Reykjavík, in Islanda il fuso orario per ottenere effettivamente UTC/GMT.
  11. 1

    java.util.Data rappresenta un data/ora fino ai millisecondi. Non sono un’opzione, ma di includere un tempo con esso. Si potrebbe provare ad azzerare il tempo, ma poi fusi orari e dell’ora legale entrerà in gioco-e che possono rovinare tutto verso il basso la linea (e.g. 21/03/2012 0:00 GMT is 20/03/2012 PDT).

    Ciò che si potrebbe desiderare è un java.sql.Date di rappresentare solo la parte data (anche se internamente è ancora utilizza ms).

    • ho cercato di azzeramento del tempo..ma io voglio solo la data senza tempo..non addirittura a 0:0:00
  12. 1

    La classe corretta da utilizzare per una data senza tempo del giorno è LocalDate. LocalDate è una parte di java.ora, il moderno Java data e l’ora di API.

    Quindi la cosa migliore che puoi fare è se è possibile modificare il getStartDate metodo che si utilizza per restituire un LocalDate:

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

    Esempio di output:

    21/03/2012

    Se non è possibile modificare il getStartDate, si può ancora essere in grado di aggiungere un nuovo metodo di restituire il tipo che si desidera. Tuttavia, se non può permettersi di fare, che solo ora, convertire il vecchio Date che si ottiene (presumo 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();

    Si prega di inserire il fuso orario che è stato assunto per la Date. Si può utilizzare ZoneId.systemDefault() per la JVM fuso orario, solo che questa impostazione può essere modificata in qualsiasi momento da altre parti del programma o da altri programmi in esecuzione nella stessa JVM.

    Il java.util.Date classe è ciò che siamo stati tutti utilizzano quando è stata fatta questa domanda 6 anni fa (no, non a tutti; sono stato, e ci sono stati molti). java.ora è uscito un paio di anni più tardi e ha sostituito il vecchio Date, Calendar, SimpleDateFormat e DateFormat. Riconoscendo che sono stati mal progettati. Inoltre, un Date nonostante il suo nome non può rappresentare una data. E ‘ un punto nel tempo. Che cosa le altre risposte non sono loro turno e il tempo per l’inizio della giornata (“mezzanotte”) nella JVM del fuso orario predefinito. Non rimuovere l’ora del giorno, solo imposta di esso, di solito a 00:00. Modificare il fuso orario predefinito — come ho detto, anche un altro programma in esecuzione nella stessa JVM può farlo in qualsiasi momento e senza preavviso — e tutto ciò che vi break (spesso).

    Link: Oracle tutorial: Data Ora che spiega come utilizzare java.time.

    • Forse si dovrebbe chiarire dove si intende java.util.Date contro java.sql.Date. Non era chiaro per me nella vostra discussione.
  13. 0
    String substring(int startIndex, int endIndex)

    In altre parole sai che il tuo stringa sarà di 10 characers a lungo, così si potrebbe fare:

    FinalDate = date.substring(0,9);
    • sì….ma io voglio la data in Data oggetto…quindi quando posso convertire questa Stringa in Data oggetto si aggiungerà anche il tempo..ma u non vuole di tempo…
  14. 0

    È anche possibile modificare manualmente la parte di data e formato in “dd/mm/yyyy” modello secondo il vostro requisito.

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

    Se il valore di ritorno non funziona, controllare che il parametro di contesto in web.xml.
    es.

       <context-param> 
            <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
            <param-value>true</param-value>
        </context-param>
    • Date returnDate=new Date((changeDate.getTime()/(24*60*60*1000))*(24*60*60*1000)); è necessario dividere la componente tempo e moltiplicare di nuovo. Sottraendo tempo di portarla al giorno precedente stesso tempo
  15. 0

    Un altro modo per lavorare qui è per l’utilizzo di java.sql.Data di sql Data non ha il tempo associato con esso, mentre java.util.Data sempre avere un timestamp.
    Che cosa cattura il punto qui è java.sql.Data estende java.util.Data, pertanto java.util.Data variabile può essere un riferimento a java.sql.Data(senza tempo) e java.util.Data del corso(con data e ora).

    • Corretto. java.sql.Date oggetto, infatti, hanno un tempo di giorno. Che il tempo è impostato per il primo momento della giornata in UTC, 00:00:00.000. Chiaramente nel JavaDoc. Il java.sql.Date classe è un hack, creato, perché nei suoi primi anni di Java mancava una sola data corrispondente alla data solo DATE tipo in SQL. Se si vuole veramente una sola data, senza qualsiasi momento del giorno o del fuso orario, utilizzare il LocalDate classe trovati in (a) Joda in Tempo o (b) la nuova versione di java.tempo in bundle in Java 8.
  16. 0

    In addtition a cosa @jseals ha già detto. Penso che l’org.apache.commons.lang.tempo.DateUtils classe è probabilmente che cosa si dovrebbe essere alla ricerca di.

    È metodo truncate(Data,campo int) funzionato molto bene per me.

    Javadoc : https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html#truncate(java.util.Date, int)

    Dal momento che è necessario troncare tutti i campi che è possibile utilizzare :

    DateUtils.truncate(new Date(),Calendar.DAY_OF_MONTH)
  17. 0

    Non cercare di rendere difficile, basta seguire una semplice

    data una stringa in cui la data è salvato

    String s2=date.substring(0,date.length()-11);

    ora stampare il valore di s2.
    esso contribuirà a ridurre il vostro stringa di lunghezza e si ottengono solo parte della data.

    • Basta usare Apache Utils DateUtils.tronca(dateYouWantToTruncate, Calendario.GIORNO_DEL_MESE);
  18. 0

    Non posso credere che nessuno ha offerto questa merda di rispondere con tutto il resto di loro. È sconsigliata per decenni.

    @SuppressWarnings("deprecation")
    ...
        Date hitDate = new Date();
        hitDate.setHours(0);
        hitDate.setMinutes(0);
        hitDate.setSeconds(0);
    • E obsoleto per una ragione. Tali metodi di lavoro inaffidabile attraverso i fusi orari.

Lascia un commento