将String转换为Timestamp会产生额外的“ 0”

时间:2019-04-04 05:50:27

标签: java timestamp

我正在将字符串转换为时间戳,但是输出格式具有额外的“ 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”。

4 个答案:

答案 0 :(得分:3)

智能对象,而不是哑字符串

请确保您了解日期时间对象是 not 文本,与String不同。

日期时间对象可以生成包含表示该值的文本的字符串。可以按照针对各种语言环境本地化的各种不同格式来创建该字符串。在转换为对象的值之后,可以通过解析输入字符串来实例化日期时间对象。但是字符串和日期时间对象是分开且不同的。

在可行的情况下,在整个代码库中使用日期时间对象,而不是仅仅依靠字符串。

java.time

您使用的是可怕的日期时间类,而这些类早已被 java.time 类所取代。永远不要使用java.util.Datejava.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