我的输入字符串为2012-07-27,我希望输出为日期,但格式与2012-07-27相同
我的代码是
DateFormat df = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
try {
Date today = df.parse("20-12-2005");
System.out.println("Today = " + df.format(today));
} catch (ParseException e) {
e.printStackTrace();
}
我的输出是
Fri Jul 27 00:00:00 IST 2012
但是我希望像2012-07-26 23:59:59那样返回日期对象而不是字符串任何帮助请
任何帮助都非常感谢
答案 0 :(得分:7)
您可以使用与解析日期相同的SimpleDateFormat
来将日期格式化为字符串。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = formatter.parse("2012-07-27");
System.out.println(date1); // prints Fri Jul 27 00:00:00 IST 2012
System.out.println(formatter.format(date1)); // prints 2012-07-26
答案 1 :(得分:1)
首先,我认为重要的是要注意System.out.println
隐式调用其参数的toString
方法。参数必须是Object
或其子类。 Date
是Object
的子类。话虽如此,请看一下1.7 Date#toString
实现,
public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY) {
index = 8;
}
convertToAbbr(sb, wtb[index]).append(' '); // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null) {
sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}
Date
对象的字符串表示形式指定为EEE MMM dd HH:mm:ss zzz yyyy
。这正是你所看到的。
如果要以其他格式显示Date
对象,请使用SimpleDateFormat
类。其唯一目的是为Date
对象表示为字符串的方式增加灵活性。
另外 ...
一种可能的,虽然荒谬的解决方法是创建自己的包装类,
public class MyDate{
private final Date d;
private final SimpleDateFormat sdf;
public(Date d, SimpleDateFormat sdf){
this.d = d;
this.sdf = sdf;
}
// not recommended...should only be used for debugging purposes
@Override
public String toString(){
return sdf.format(d);
}
}
答案 2 :(得分:0)
您必须使用具有所需输出格式(SimpleDateFormat
)
format()
答案 3 :(得分:0)
您可以使用相同的String
获取日期SimpleDateFormat
。 format
方法执行此操作:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2012-07-27");
System.out.println(sdf.format(date1);
答案 4 :(得分:0)
java.util.Date
中没有“格式”属性。 Date
实例是一个表示时刻的简单对象(实际上,它的状态仅由它在内部存储的unix时间戳定义)。
正如其他人所说,使用(例如)SimpleDateFormat
将Date
实例打印为字符串。
答案 5 :(得分:0)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));
答案 6 :(得分:0)
LocalDate.parse( "2012-07-27" )
.toString()
2012-07-27
现代的方法是使用java.time类。
LocalDate
类表示没有时间且没有时区的仅限日期的值。
您的输入字符串格式符合ISO 8601标准。在解析/生成表示日期时间值的字符串时,java.time类默认使用ISO 8601格式。所以根本不需要指定格式化模式。
LocalDate ld = LocalDate.parse( "2012-07-27" );
不要将日期时间对象与表示其值的字符串混淆。日期时间类/对象可以解析字符串并生成字符串,但String
始终是一个独立且不同的对象。
String output = ld.toString();
2012-07-27
如果您的输入是非标准输入,请定义DateTimeFormatter
以匹配。
String input = "20-12-2005" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
ld.toString():2012-07-27
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。