我的字符串格式为 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
答案 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
...或更新字符串以包含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)
LocalDateTime.parse( "2016-09-17 12:12:44".replace( " " , "T" ) )
Answer by Crowder是正确的。
使用现代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 );