将 Java String 转换为 sql。时间戳
有一个字符串采用这种格式:YYYY-MM-DD-HH。MM.SS。NNNN 时间戳来自 DB2 数据库。我需要将其解析为java.sql.Timestamp,并且不会丢失任何优先级。到目前为止,我无法找到现有的代码来解析到微秒。SimpleDateFormat 返回一个 Date,并且只解析为毫秒。看了一下JodaTime,也没想到这会起作用。
有一个字符串采用这种格式:YYYY-MM-DD-HH。MM.SS。NNNN 时间戳来自 DB2 数据库。我需要将其解析为java.sql.Timestamp,并且不会丢失任何优先级。到目前为止,我无法找到现有的代码来解析到微秒。SimpleDateFormat 返回一个 Date,并且只解析为毫秒。看了一下JodaTime,也没想到这会起作用。
你试过使用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,但您的里程可能会有所不同)来解析到毫秒。然后将字符串的其余部分作为另一个字符串,并使用 对其进行解析。然后,您可以非常轻松地组合这些值:SimpleDateFormat
Integer.parseInt
Date date = parseDateFromFirstPart();
int micros = parseJustLastThreeDigits();
Timestamp ts = new Timestamp(date.getTime());
ts.setNanos(ts.getNanos() + micros * 1000);
您可以使用 .该文档指出,它理解格式的时间戳,因此您可能需要更改传入字符串中的字段分隔符。Timestamp.valueOf(String)
yyyy-mm-dd hh:mm:ss[.f...]
再说一遍,如果你要这样做,那么你可以自己解析它,并使用该方法来存储微秒。setNanos