我想像下面那样转换Java8之前的版本。
DateFormat formatter = new SimpleDateFormat(timestampPattern, locale);
Date dt = formatter.parse(timestamp);
Date currentDateTime = getCurrentTime();
对于Java 8代码,以毫秒为单位支持超过3位数字。我找到了使用以下简单代码来实现此目的的方法。
String parsedate="2016-03-16 01:14:21.6739";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSS");
LocalDateTime newdate = LocalDateTime.parse(parsedate, dateTimeFormatter);
上述代码存在的问题是,您必须在解析特定类之前先了解特定的类,例如,如果其中仅包含日期,则必须使用LocalDate;如果仅包含时间LocalTime,并且必须包含ZonedDateTime,则必须使用日期和时间。 >
我的问题是我不知道timestampPattern或timestamp(在Java8之前的代码段中给出)之前(因为它是用户输入),因此无法在我的代码中选择子类。有什么更好的办法吗?
答案 0 :(得分:1)
以下代码将向您展示如何处理它:
String parsedate="2016-03-16 01:14:21.6739";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSS");
TemporalAccessor parsed = dateTimeFormatter.parse(parsedate);
System.out.println(parsed.getClass());
// with the Parsed object you can then construct what you require... e.g. LocalDate:
System.out.println(LocalDate.from(parsed));
// or LocalDateTime:
System.out.println(LocalDateTime.from(parsed));
此打印:
class java.time.format.Parsed
2016-03-16
2016-03-16T01:14:21.673900
因此,您只需要使用代码中需要的内容,并从LocalDate
对象构建LocalDateTime
或Parsed
。
请注意,如果用户只能输入yyyy-MM-dd
,并且您将使用这种日期时间格式,则在创建LocalDateTime
时会遇到问题,但是我认为您通常知道您需要的目标类型。否则,您甚至可以只使用TemporalAccessor
。
为了解决特定的日期类型问题,您可能需要处理异常(尝试解析它(或从from
对象调用Parsed
)并回退到下一个可能的日期格式或类型),或者只是事先检查格式,然后使用合适的日期格式和类型,这是我所建议的。