2012-04-18 222 views
15

我無法以雙數字格式顯示日期。我希望當天或月份是單個數字的例子時:4它會顯示04.如果有人能夠幫助我,我很難提出它的邏輯,我會非常感激。以雙數字格式顯示日期

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

也許地方=「0」 +月會因爲它是存儲工作,然後作爲一個字符串? – drodil 2012-04-18 06:26:30

回答

28
DecimalFormat mFormat= new DecimalFormat("00"); 
mFormat.format(Double.valueOf(year)); 
你的情況

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

這段代碼很好,但由於某種原因它強制顯示我的代碼爲3/18而不是4/18。我不明白爲什麼 – 2012-04-18 07:03:58

+0

嘗試mFormat.setRoundingMode(RoundingMode.DOWN);看到編輯答案。 – 2012-04-18 07:06:40

1
if ((month+1)<10){ 
    place = "0"+(String) (month+1) 
} 

做一天一樣,你是好去。

+1個月,因爲它與0

2

使用SimpleDateFormat級開始。有很多方法可以做到這一點..

這樣的事情..

SimpleDateFormat sdfSource = new SimpleDateFormat("dd/MM/yy"); // you can add any format.. 


     Date date = sdfSource.parse(strDate); 
+0

這比接受的答案要方便得多 – javadba 2018-01-30 06:44:26

13

請使用SimpleDateFormat的

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

輸出

Date : 18-Apr-2012 
+1

這是正確的答案。 – 2012-04-18 06:31:30

+2

@GregKopff不,不正確。該問題明確要求該月份爲兩位數字,而不是月份名稱。 – 2016-05-06 18:30:40

+0

@Basil,那麼,你可以使用dd-MM-yyyy代替dd-MMM-yyyy – Hatim 2016-12-24 05:59:15

8
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)); 
7
if (dayOfMonth < 10) { 
    NumberFormat f = new DecimalFormat("00"); 
    Sting date = String.valueOf(f.format(dayOfMonth)); 
} 
+0

爲我工作..很好的解決方案.. +1 – 2017-11-28 06:52:25

3

TL;博士

LocalDate.now() 
     .toString() 

2016年1月7日

不如總是明確指定所需/預期的時區。

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

避免舊日期,時間類

您使用java.util.Calendar類是現在的遺產。避免這個類,以及java.util.Date等。這些已被證明設計不佳,令人困惑和麻煩。

java.time

舊日期,時間類已經被內置到Java 8和後來的java.time框架所取代。許多功能已被移植到ThreeTen-Backport項目中的Java中,並進一步適用於Android的ThreeTenABP

這些現代類可以在一行代碼中完成您的目標,如下所示。

日期 - 時間格式化功能

兩個老過時的日期時間類,以及java.time類提供的格式化功能。您無需編寫自己的格式代碼。

時區

時區對確定日期至關重要。日期隨着時區的變化而變化,這是東部地區早些時候出現的新的一天。這個問題在問題和其他答案中被忽略。如果省略,則隱式應用JVM的當前默認時區。最好明確指定你想要的/預期的時區。

LocalDate

對於日期只值無無時區時間的天,並使用LocalDate。儘管LocalDate內沒有存儲時區,但時區確定爲「今日」。

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

ISO 8601

你想要的YYYY-MM-DD與兩位數格式恰好符​​合ISO 8601標準確定合理的格式日期時間值的文本表示。該標準在java.time類中用於解析/生成字符串。

String output = today.toString(); 

就是這樣,3行代碼。你甚至可以合併它們。

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

關於java.time

java.time框架是建立在Java 8和更高版本。這些類代替了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目,現在在maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

您可以直接使用數據庫交換java.time對象。使用符合JDBC 4.2或更高版本的JDBC driver。無需字符串,不需要java.sql.*類。

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore

+0

親愛的下 - 選民:請留下批評與您的投票。 – 2017-03-01 20:35:21

+0

好吧,我正在等待stackoverflow時間給你一個upvote :) – 2017-03-02 19:12:37

0

喬達時間

使用Joda-Time庫,特別是org.joda.time.DateTime類。

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

結果將是2個位數

如果需要,例如一年,您可以使用:

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

結果將在今年的4個位數。

+0

Java 8中沒有'DateTime'類,Android中沒有太多的Java 8。 – 2017-03-01 22:24:35

+0

Tks,我將我的文本更改爲org.joda.time.DateTime。 – 2017-03-02 12:11:23

+0

這個答案有什麼問題?我已經在不同的環境中使用過,我從來沒有遇到過問題。 – 2017-06-09 15:30:39

0

你可以使用的String.format()方法。

例如:

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

因此他們將在每月的前面加上「0」,如果所選擇的月份小於10