如何将包含日期和时间的字符串转换为 LocalTime 变量

Dev*_*ght 3 java time localtime simpledateformat java-time

我正在转换String包含三个不同时间开始、结束和持续时间的s序列

"00:01:00,00:02:00,00:01:00"

LocalTime变量:

for (final String str : downtime) {
      final DependencyDownTime depDownTime = new DependencyDownTime ();
      final String[] strings = str.split (",");

      if (strings.length == 3) {

           LocalTime start = LocalTime.parse (strings[0]);
           depDownTime.setStartTime (start);

           LocalTime end = LocalTime.parse (strings[1]);
           depDownTime.setEndTime (end);

           Duration duration = Duration.between (start, end);
           depDownTime.setDuration (duration);
           downTimes.add (depDownTime);
      }
  }
Run Code Online (Sandbox Code Playgroud)

String正在分析已发生变化,现在包括一个日期。 2017-09-13 00:01:00

如何删除仅保留时间的日期字符串?

我曾尝试使用 SimpleDateFormat

final DateFormat dateFormat = new SimpleDateFormat ("HH:mm:ss");
LocalTime start = LocalTime.parse (dateFormat.format (strings[0]));
depDownTime.setStartTime (start);
Run Code Online (Sandbox Code Playgroud)

但我得到一个 java.lang.IllegalArgumentException

小智 6

您可以使用 a DateTimeFormatter,然后将其解析为 aLocalDateTime并从中提取LocalTime

String input = "2017-09-13 00:01:00";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

LocalTime time = LocalDateTime.parse(input, fmt).toLocalTime();
Run Code Online (Sandbox Code Playgroud)

或者直接解析为 a LocalTime,使用from方法:

LocalTime time = LocalTime.from(fmt.parse(input));
Run Code Online (Sandbox Code Playgroud)

或者(甚至更简单):

LocalTime time = LocalTime.parse(input, fmt);
Run Code Online (Sandbox Code Playgroud)