我无法以两位数格式显示日期。我希望它是这样的,当白天或月份是一个数字的例子: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 :(得分: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)
LocalDate.now()
.toString()
2016年1月7日
最好明确指定所需/预期的时区。
LocalDate.now( ZoneId.of( "America/Montreal" ) )
.toString()
您正在使用的java.util.Calendar类现已成为遗留类。避免使用此类,以及java.util.Date等。事实证明,这些设计很差,令人困惑,也很麻烦。
旧的日期时间类已被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 );
您想要的具有两位数字的YYYY-MM-DD格式符合ISO 8601标准,该标准定义了日期时间值的文本表示的合理格式。默认情况下,此标准在java.time类中用于解析/生成字符串。
String output = today.toString();
这就是全部,3行代码。你甚至可以把它们结合起来。
String output = LocalDate.now( ZoneId.of( "America/Montreal" ) ).toString();
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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”。