以双位数格式显示日期

时间:2012-04-18 06:24:07

标签: java android date calendar

我无法以两位数格式显示日期。我希望它是这样的,当白天或月份是一个数字的例子: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));

11 个答案:

答案 0 :(得分:42)

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 :(得分:15)

请使用SimpleDateFormat

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

输出

Date : 18-Apr-2012

答案 2 :(得分:10)

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

答案 3 :(得分:8)

if (dayOfMonth < 10) {
    NumberFormat f = new DecimalFormat("00");
    Sting date = String.valueOf(f.format(dayOfMonth));
}

答案 4 :(得分:4)

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框架所取代。许多功能已经被后端移植到Java 6&amp; ThreeTen-Backport项目中的7,并在ThreeTenABP中进一步适应Android。

这些现代课程可以在一行代码中实现您的目标,如下所示。

日期时间格式功能

旧的过时日期时间类和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.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 5 :(得分:2)

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

白天也这样做,你很高兴。

月份+1,因为它以0开头。

答案 6 :(得分:2)

使用SimpleDateFormat类..有很多方法可以做到这一点..

像这样......

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


      Date date = sdfSource.parse(strDate);

答案 7 :(得分:2)

纯粹使用Java 8时间库:

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

答案 8 :(得分:1)

您可以使用SimpleDateFormat类

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

了解更多信息 https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

答案 9 :(得分: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位数。

答案 10 :(得分:0)

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

示例:

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

所以如果所选月份小于10,他们会在月前加“0”。