将String转换为Date java错误

时间:2016-09-17 07:05:29

标签: java

我的字符串格式为 2016-09-17 12:12:44 。 我将它转换为日期对象:

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH);
            Date endDate = sdf1.parse(expiry);

输出为2016年9月17日星期六00:12:44 GMT + 05:30 2016年。但输出应为: 周六9月17日12:12:44 GMT + 05:30 2016

3 个答案:

答案 0 :(得分:1)

h是"小时/上午/下午(1-12)"。没有am / pm指标,假设是a.m.使用HH hh

String expiry = "2016-09-17 12:12:44";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
// ------------------------------------------------------^^
Date endDate = sdf1.parse(expiry);
System.out.println(endDate);

输出:

Sat Sep 17 12:12:44 GMT 2016

Live Example

...或更新字符串以包含am / pm指示符并将a添加到格式字符串。

答案 1 :(得分:1)

document H 中所述 - 代表24小时格式, h - 代表12小时格式,上午/下午

因此格式应为 yyyy-MM-dd HH:mm:ss

        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
        Date endDate = sdf1.parse("2016-09-17 12:12:44");
        System.out.println(endDate.toString());

答案 2 :(得分:0)

TL;博士

LocalDateTime.parse( "2016-09-17 12:12:44".replace( " " , "T" ) )

详细

Answer by Crowder是正确的。

java.time

使用现代java.time类更容易。

默认情况下,这些类在解析和生成字符串时使用标准ISO 8601格式。因此,无需为此类字符串指定格式设置模式。

您可以通过使用T替换中间的SPACE来使您的输入字符串符合要求。

String input = "2016-09-17 12:12:44".replace( " " , "T" );

我们解析为LocalDateTime,因为您的输入缺少有关偏离UTC和时区的任何信息。

LocalDateTime ldt = LocalDateTime.parse( input );

根据上下文,您知道这个值是印度的时间。因此,应用Asia/Kolkata的时区来获取ZonedDateTime

ZoneId z = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = ldt.atZone( z );