我正在将字符串转换为时间戳,但是输出格式具有额外的“ 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”。
答案 0 :(得分:3)
请确保您了解日期时间对象是 not 文本,与String
不同。
日期时间对象可以生成包含表示该值的文本的字符串。可以按照针对各种语言环境本地化的各种不同格式来创建该字符串。在转换为对象的值之后,可以通过解析输入字符串来实例化日期时间对象。但是字符串和日期时间对象是分开且不同的。
在可行的情况下,在整个代码库中使用日期时间对象,而不是仅仅依靠字符串。
您使用的是可怕的日期时间类,而这些类早已被 java.time 类所取代。永远不要使用java.util.Date
或java.sql.Timestamp
。
将输入字符串解析为OffsetDateTime
对象。
String input = "2017-01-01T00:00:00.000-05:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
如果您的目标是将该值存储为类中的成员变量,请将该成员变量的类型设置为OffsetDateTime
,而不是String
。
toString
方法以标准ISO 8601格式生成文本。
要生成其他格式的文本,请使用DateTimeFormatter
类。该课程已经被覆盖很多次了,因此请搜索Stack Overflow以了解更多信息。
警惕生成表示时刻的字符串,但忽略时区或UTC偏移量的指示符。这就像在报告金额时忽略提及货币。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ;
String output = odt.format( f ) ;
答案 1 :(得分:2)
您可以尝试以下代码。我添加了新的格式化程序,并将时间戳转换为所需的正确格式。
我添加了以下方法,假设您需要格式化日期并进行打印,同时还要格式化时间戳并进行转换。
public static void main(String args[]) throws ParseException {
String date = "2017-01-01T00:00:00.000-05:00";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
java.util.Date parsedDate = dateFormat.parse(date);
System.out.println(parsedDate);
Timestamp time = new Timestamp(parsedDate.getTime());
System.out.println(dateFormat2.format(time.getTime()));
} catch (ParseException e) {
e.printStackTrace();
}
}
答案 2 :(得分:1)
您正在打印时间戳。请将其更改为类似于
的字符串string
它将给您预期的结果
答案 3 :(得分:1)
额外的“ 0”表示毫秒。另外,您可以点击以下链接,
Converting java date to Sql timestamp
然后从这个解决方案开始, https://stackoverflow.com/a/22857062/1529092
java.util.Date utilDate = new java.util.Date();
java.sql.Timestamp sq = new java.sql.Timestamp(utilDate.getTime());
System.out.println(sa); //this will print the milliseconds as the toString() has been written in that format
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(timestamp)); //this will print without ms
或者您可以使用下面的链接转换为不同格式, How to remove milliseconds from Date Object format in Java