java - 将字符串转换为时间戳会提供额外的“0”
问题描述
我正在将字符串转换为时间戳,但输出格式有额外的“0”。
下面是代码。
代码:
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class StringToTimeStamp {
public static void main(String[] args) {
String date = "2017-01-01T00:00:00.000-05:00";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
try {
java.util.Date parsedDate = dateFormat.parse(date);
System.out.println(parsedDate);
Timestamp time = new Timestamp(parsedDate.getTime());
System.out.println(time);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
输出
Sun Jan 01 00:00:00 IST 2017
2017-01-01 00:00:00.0
预期产出
Sun Jan 01 00:00:00 IST 2017
2017-01-01 00:00:00
我无法理解为什么输出中有额外的“0”?
JDK版本:1.8.0_191
编辑
我尝试像这样格式化我的时间戳实例:
System.out.println(dateFormat.format(time));
它给出了以下输出:
Sun Jan 01 00:00:00 IST 2017
2017-01-01T00:00:00
它删除了“0”,但添加了“T”。
解决方案
智能对象,而不是愚蠢的字符串
请确保您了解日期时间对象不是文本,与String
.
日期时间对象可以生成包含表示该值的文本的字符串。可以按照为各种语言环境本地化的各种不同格式创建该字符串。在转换为对象的值之后,可以通过解析输入字符串来实例化日期时间对象。但是字符串和日期时间对象是分开的和不同的。
尽可能在整个代码库中使用日期时间对象,而不是仅仅依赖字符串。
java.time
您正在使用几年前被java.time类取代的糟糕的日期时间类。永远不要使用java.util.Date
也不java.sql.Timestamp
。
将您的输入字符串解析为OffsetDateTime
对象。
String input = "2017-01-01T00:00:00.000-05:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
如果您的目标是将此值作为成员变量存储在您的类中,请将该成员变量设置为 typeOffsetDateTime
而不是String
.
该toString
方法生成标准 ISO 8601 格式的文本。
要生成其他格式的文本,请使用DateTimeFormatter
该类。这门课已经讲过很多次了,所以搜索 Stack Overflow 来了解更多。
小心生成代表时刻的字符串,但忽略时区指示符或与 UTC 的偏移量。这就像报告金额而忽略提及货币一样。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ;
String output = odt.format( f ) ;
推荐阅读
- r - R中的线性代数
- mysql - MySQL 不允许我在 UPDATE 和 SET 命令之后添加 FROM 命令
- python - 当我尝试更新它时,PIP 说它是最新的,但它不是
- postgresql - 有没有办法找到每一行的总和?PostgreSQL
- java - Java8:G1GC Remark 阶段的类卸载耗时太长
- amazon-web-services - HTTP ERROR 408 - 设置 kubernetes 以及 AWS ELB 和 NGINX Ingress 之后
- python - 如何在python中解开子进程解析xml
- python - 如果我将所有内容都正确放入,我该怎么做才能修复此语法错误?
- reactjs - React Native Maps - 标记重绘功能仍然有效?
- javascript - GET http://0.0.0.0:8080/index.html?age=8&rel= 404 (/找不到对象)