将 Java String 转换为 sql。时间戳

2022-09-01 01:19:06

有一个字符串采用这种格式:YYYY-MM-DD-HH。MM.SS。NNNN 时间戳来自 DB2 数据库。我需要将其解析为java.sql.Timestamp,并且不会丢失任何优先级。到目前为止,我无法找到现有的代码来解析到微秒。SimpleDateFormat 返回一个 Date,并且只解析为毫秒。看了一下JodaTime,也没想到这会起作用。


答案 1

你试过使用Timestamp.valueOf(String)吗?看起来它应该几乎完全按照您的要求去做 - 您只需要将日期和时间之间的分隔符更改为空格,将小时和分钟,分钟和小时之间的分隔符更改为冒号:

import java.sql.*;

public class Test {
    public static void main(String[] args) {
        String text = "2011-10-02 18:48:05.123456";
        Timestamp ts = Timestamp.valueOf(text);
        System.out.println(ts.getNanos());
    }
}

假设您已经验证了字符串长度,这将转换为正确的格式:

static String convertSeparators(String input) {
    char[] chars = input.toCharArray();
    chars[10] = ' ';
    chars[13] = ':';
    chars[16] = ':';
    return new String(chars);
}

或者,通过获取子字符串并使用Joda Time或(我非常喜欢Joda Time,但您的里程可能会有所不同)来解析到毫秒。然后将字符串的其余部分作为另一个字符串,并使用 对其进行解析。然后,您可以非常轻松地组合这些值:SimpleDateFormatInteger.parseInt

Date date = parseDateFromFirstPart();
int micros = parseJustLastThreeDigits();

Timestamp ts = new Timestamp(date.getTime());
ts.setNanos(ts.getNanos() + micros * 1000);

答案 2

您可以使用 .该文档指出,它理解格式的时间戳,因此您可能需要更改传入字符串中的字段分隔符。Timestamp.valueOf(String)yyyy-mm-dd hh:mm:ss[.f...]

再说一遍,如果你要这样做,那么你可以自己解析它,并使用该方法来存储微秒。setNanos