Visualizzazione della data in formato a due cifre

Ho difficoltà a visualizzare la data in formato a due cifre. Voglio che sia così che quando il giorno o il mese è un esempio di una sola cifra: 4 Mostrerebbe 04. Ho problemi a venire con la logica per farlo, se qualcuno mi può aiutare sarei davvero grato.

Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int day = c.get(Calendar.DAY_OF_MONTH); int month = c.get(Calendar.MONTH); if (month % 10 == 0) { Place = 0 + month; } String Dates = year + "-" + Place + "-" + day; Date.setText((Dates)); 

 DecimalFormat mFormat= new DecimalFormat("00"); mFormat.format(Double.valueOf(year)); 

nel tuo caso:

  mFormat.setRoundingMode(RoundingMode.DOWN); String Dates = mFormat.format(Double.valueOf(year)) + "-" + mFormat.format(Double.valueOf(Place)) + "-" + mFormat.format(Double.valueOf(day)); 

Si prega di utilizzare SimpleDateFormat

 SimpleDateFormat sd1 = new SimpleDateFormat("dd-MMM-yyyy"); System.out.println("Date : " + sd1.format(new Date(c.getTimeInMillis())); 

Produzione

 Date : 18-Apr-2012 
 Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int day = c.get(Calendar.DAY_OF_MONTH); int month = c.get(Calendar.MONTH)+1; String Dates = year + "-" +(month<10?("0"+month):(month)) + "-" + day; Date.setText((Dates)); 
 if (dayOfMonth < 10) { NumberFormat f = new DecimalFormat("00"); Sting date = String.valueOf(f.format(dayOfMonth)); } 

tl; dr

 LocalDate.now() .toString() 

2016/01/07

Meglio specificare sempre il fuso orario desiderato / previsto in modo esplicito.

 LocalDate.now( ZoneId.of( "America/Montreal" ) ) .toString() 

Evita le vecchie lezioni di data-ora

La class java.util.Calendar che stai usando è ormai legacy. Evita questa class, insieme a java.util.Date e così via. Questi hanno dimostrato di essere mal progettato, confuso e problematico.

java.time

Le vecchie classi data-ora sono state soppiantate dal framework java.time incorporato in Java 8 e versioni successive. Gran parte della funzionalità è stata sottoposta a backup in Java 6 e 7 nel progetto ThreeTen-Backport e ulteriormente adattata ad Android in ThreeTenABP .

Queste classi moderne possono raggiungere il tuo objective in una singola riga di codice, come mostrato di seguito.

Funzionalità di formattazione per data e ora

Sia le vecchie classi datate obsolete che le classi java.time offrono funzionalità di formattazione. Non c’è bisogno che tu scriva il tuo codice di formattazione.

Fuso orario

Il fuso orario è fondamentale per determinare la data. La data varia in base al fuso orario in tutto il mondo, mentre un nuovo giorno sorge prima nell’est. Questo problema è stato ignorato nella domanda e altre risposte. Se omesso, viene applicato implicitamente il fuso orario predefinito corrente della JVM. Meglio specificare esplicitamente il fuso orario desiderato / atteso.

LocalDate

Per un valore di sola data senza ora del giorno e senza fuso orario, utilizzare LocalDate . Mentre nessun fuso orario è memorizzato all’interno di LocalDate , un fuso orario determina “oggi”.

 ZoneId zoneId = ZoneId.of( "America/Montreal" ); LocalDate today = LocalDate.now( zoneId ); 

ISO 8601

Il formato desiderato di YYYY-MM-DD a due cifre è conforms allo standard ISO 8601 che definisce i formati sensibili per le rappresentazioni testuali dei valori di data e ora. Questo standard è utilizzato di default nelle classi java.time per analizzare / generare stringhe.

 String output = today.toString(); 

Questo è tutto, 3 linee di codice. Potresti anche combinarli.

 String output = LocalDate.now( ZoneId.of( "America/Montreal" ) ).toString(); 

A proposito di java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantano le fastidiose vecchie lezioni di data e ora come java.util.Date , Calendar e SimpleDateFormat .

Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione alle classi java.time .

Per saperne di più, consultare l’ esercitazione Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

È ansible scambiare oggetti java.time direttamente con il proprio database. Utilizzare un driver JDBC compatibile con JDBC 4.2 o successivo. Nessuna necessità di stringhe, nessuna necessità per le classi java.sql.* .

Dove ottenere le classi java.time?

  • Java SE 8 , Java SE 9 e versioni successive
    • Built-in.
    • Parte dell’API Java standard con un’implementazione in bundle.
    • Java 9 aggiunge alcune funzionalità e correzioni minori.
  • Java SE 6 e Java SE 7
    • Gran parte della funzionalità java.time è back-porting su Java 6 e 7 in ThreeTen-Backport .
  • android
    • Versioni successive di implementazioni di bundle Android delle classi java.time.
    • Per Android precedente, il progetto ThreeTenABP adatta ThreeTen-Backport (menzionato sopra). Vedi Come usare ThreeTenABP ….

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. Puoi trovare alcune classi utili come Interval , YearWeek , YearQuarter e altro .

Usa la class SimpleDateFormat . Ci sono molti modi per farlo …

qualcosa come questo..

  SimpleDateFormat sdfSource = new SimpleDateFormat("dd/MM/yy"); // you can add any format.. Date date = sdfSource.parse(strDate); 
 if ((month+1)<10){ place = "0"+(String) (month+1) } 

fai lo stesso per il giorno e sei a posto.

+1 in mese perché inizia con 0.

È ansible utilizzare la class SimpleDateFormat

 String dates = new java.text.SimpleDateFormat("dd-MM-YYYY").format(new Date()) 

per maggiori informazioni https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

Joda-Time

Utilizzando la libreria Joda-Time , in particolare la class org.joda.time.DateTime .

 DateTime datetime = new DateTime(new Date()); String month = datetime.toString("MM"); 

il risultato sarà di 2 cifre

Se per esempio hai bisogno di un anno puoi usare:

 String year = datetime.toString("YYYY"); 

il risultato sarà di 4 cifre dell’anno.

puoi usare il metodo String.format ().

esempio :

 String.format("%02d", month); 

quindi aggiungevano “0” di fronte al mese se il mese scelto era inferiore a 10.

Puramente utilizzando la libreria Java 8 Time:

 String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));