我在将json文件中的日期转换为时间戳时遇到问题。当小时=12时,返回的时间戳不正确。
Java版本1.8.0\u 171
使用下面的代码片段,我希望输出是
2017-07-19 07:43:42.0
2017-07-18 08:43:42.0
2017-07-19 09:43:42.0
相反,我得到了
2017-07-19 07:43:42.0
2017-07-18 20:43:42.0
2017-07-19 09:43:42.0
我已经在两台机器上试过了,并让一位同事运行了它,同样的结果任何人都能看到问题所在;我可能正盯着它看
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Locale;
import org.apache.commons.lang3.StringUtils;
public class TimestampTest {
public static void main(String[] args) {
String input = "2017-07-19T11:43:42.000+0000";
System.out.println(stringToTimestamp(input));
input = "2017-07-19T12:43:42.000+0000";
System.out.println(stringToTimestamp(input));
input = "2017-07-19T13:43:42.000+0000";
System.out.println(stringToTimestamp(input));
}
private static Timestamp stringToTimestamp(String input) {
try {
if(StringUtils.isBlank(input)) {
return null;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ",
Locale.getDefault());
java.util.Date parsedDate = dateFormat.parse(input);
Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
return timestamp;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
这是因为您使用的是默认情况下宽松的SimpleDataFormat。如果通过设置“宽大处理”(错误)关闭宽大处理:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ", Locale.getDefault());
dateFormat.setLenient(false);
您将得到一个异常,显示:
java.text.ParseException: Unparseable date: "2017-07-19T13:43:42.000+0000"
这里的根本原因是,您提交的小时数为13小时,需要的是HH模式,而不是HH模式。由于宽大,您的代码会自动修复日期,而不是引发异常。
小时(0-23)
h小时在上午/下午(1-12)
除了您不应该再使用Date
或SimpleDateFormat
之外,您的错误是因为您使用的是hh
而不是HH
h类-
H-
考虑在您的案例中使用LocalDateTime。
问题内容: 我在将json文件中的日期转换为时间戳时遇到问题。当小时= 12时,返回的时间戳不正确。 Java版本1.8.0_171 使用下面的代码片段,我希望输出为 2017-07-19 07:43:42.0 2017-07-18 08:43:42.0 2017-07-19 09:43:42.0 相反,我得到 2017-07-19 07:43:42.0 2017-07-18 20:43:42.0
问题内容: 我想要以毫秒为单位的当前时间,然后以12小时格式存储它,但是通过这段代码,我得到了24小时格式时间。 有人可以建议修改以获得期望的结果吗? 问题答案: 更改到作为 请注意-将为您提供 分钟 而不是 月份 。
在我的MySQL数据库中,我有一个有三列的表,如下所示 notification_time是时间的数据类型。 在我的Spring-boot应用程序中,为表建模
我有以下应该返回时间戳的函数。当使用以下斜杠以字符串格式输入日期时,此代码有效:“2019/3/4”,但在使用 怎么回事?
我想将日期字符串从“2016-09-23T09:14:52.555000000”格式解析为“23-SEP-2016”格式。 这是我的密码: 问题是如果我用这句台词 SimpleDateFormat oracleDateFormat=新的SimpleDateFormat(“yyyy-MM-dd'T'kk:MM:ss.S”); 输出为(不正确的日期值): 而如果用这条线 oracleDateForma