我正在尝试创建一个 java.sql.Time 对象来查询 SQL 数据库中的时间类型,但我正在使用 joda 来解析我收到的字符串。
我尝试了几种不同的方法。这是我最近的。
protected Time startTime = null;
protected static final String dateFormat = "HH:mm:ssZ";
protected static final DateTimeFormatter formatter = DateTimeFormat.forPattern(dateFormat);
public TimeBetweenFilter(String fieldName, String type, String value) {
super(fieldName, type, value);
String [] times = value.split("\\|");
if(times.length == 2 && !times[0].isEmpty() && !times[1].isEmpty()){
try{
LocalDateTime current = LocalDateTime.now();
LocalDateTime timeFromEpoch= new LocalDateTime(formatter.parseDateTime(times[0]));
startTime = new Time(timeFromEpoch.withDate(current.getYear(), current.getMonthOfYear(), current.getDayOfMonth()).toLocalTime().toDateTimeToday().getMillis());
}catch (Exception e){
...
}
但是输出总是比收到的输入晚 1 小时。例如,如果输入是 UTC 时间的 10:30:00,则 startTime 应该是本地时间 4:30:00。但相反,我得到了 3:30。
解决了
DateTime beginning = new DateTime(DateTimeZone.UTC).toDateMidnight().toDateTime().plus(DateTime.parse(times[0], formatter).getMillis());
startTime = new Time(beginning.getMillis());
创建一个新的日期,即今天早上的午夜时区 UTC,然后以毫秒为单位添加一天中的 UTC 时间。然后将其转换为 java.sql.Time 对象。