SimpleDateFormat android没有按预期格式化

时间:2014-09-22 10:36:13

标签: java android simpledateformat

我尝试使用SimpleDateFormat格式化由3个整数表示的日期。 它看起来像这样:

...
SimpleDateFormat sdfHour = new SimpleDateFormat("HH");
SimpleDateFormat sdfMinute = new SimpleDateFormat("mm");
SimpleDateFormat sdfSecond = new SimpleDateFormat("ss");

Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getDefault());
int hours = c.get(Calendar.HOUR_OF_DAY);
int minutes = c.get(Calendar.MINUTE);
int seconds = c.get(Calendar.SECOND);

String string_hours = sdfHour.format(hours);
String string_minutes = sdfMinute.format(minutes);
String string_seconds = sdfSecond.format(seconds);

的输出
Log.d("tag", "Time string is: " + string_hours + ":" + string_minutes + ":" + string_seconds);

总是

Time string is: 19:00:00

我在这里做错了什么?

4 个答案:

答案 0 :(得分:4)

SimpleDateFormat.format需要Date,而不是int。您正在使用的方法,即接受长整数的重载版本,实际上是期望从纪元开始的毫秒,而不是您正在做的一分钟或一分钟。

使用它的正确方法应该是:

SimpleDateFormat sdfHour = new SimpleDateFormat("HH:mm:ss");
String timeString = sdfHour.format(new Date());

使用"新日期()"如本例所示,将为您提供当前时间。如果你需要格式化其他时间(比如一小时前,或者来自数据库等的东西......)传递给"格式"正确的日期实例。

如果由于某种原因你需要分开,那么你仍然可以使用它,但另一种方式:

SimpleDateFormat sdfHour = new SimpleDateFormat("HH");
SimpleDateFormat sdfMinute = new SimpleDateFormat("mm");
SimpleDateFormat sdfSecond = new SimpleDateFormat("ss");

Date now = new Date();

String string_hours = sdfHour.format(now);
String string_minutes = sdfMinute.format(now);
String string_seconds = sdfSecond.format(now);

答案 1 :(得分:1)

您不能像这样使用SimpleDateFormat

SimpleDateFormat sdfHour = new SimpleDateFormat("HH");
SimpleDateFormat sdfMinute = new SimpleDateFormat("mm");
SimpleDateFormat sdfSecond = new SimpleDateFormat("ss");

使用此:

long timeInMillis = System.currentTimeMillis();
Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(timeInMillis);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
String dateformatted = dateFormat.format(cal1.getTime());

参考this

答案 2 :(得分:1)

尝试这样的事情:

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String CurrentTime = sdf.format(cal.getTime());

答案 3 :(得分:1)

您正在调用错误的format方法。您应该为正确的参数提供Date参数,而不是使用从Format类继承的one

public final String format(Object obj)

为什么会这样?因为Java中的自动装箱程序。您提供了int,它会自动加框到Integer Object

的继承者