Вы пробовали использовать 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 или SimpleDateFormat
(я очень предпочитаю Joda Time, но ваш пробег может отличаться). Затем возьмите остаток строки как другую строку и проанализируйте ее с помощью Integer.parseInt
. Затем вы можете легко комбинировать значения:
Date date = parseDateFromFirstPart();
int micros = parseJustLastThreeDigits();
Timestamp ts = new Timestamp(date.getTime());
ts.setNanos(ts.getNanos() + micros * 1000);