2017-09-14 146 views
2

我被转换其含有的String个序列三个不同的时间
开始,结束和持续时间
"00:01:00,00:02:00,00:01:00"如何为包含字符串的日期和时间转换为LOCALTIME可变

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); 
     } 
    } 

正在解析的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); 

但我得到一个java.lang.IllegalArgumentException

回答

4

可以使用DateTimeFormatter,然后将其解析为LocalDateTime,并从中提取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(); 

或者直接解析到一个LocalTime,使用from方法:

LocalTime time = LocalTime.from(fmt.parse(input)); 

或(更简单):

LocalTime time = LocalTime.parse(input, fmt); 
+2

这个工作非常感谢。 –

+0

@SeanMcGrath不客气,很高兴帮助! – 2017-09-14 12:42:31

1

你可能只使用String#split如果你确定字符串的格式已经是相同的。

String s = "2017-09-13 00:01:00"; 
String[] frags = s.split(" "); 
System.out.println(frags[frags.length - 1]); 

输出:

00:01:00 

添加一些检查,如果你需要。

0

这可以帮助你::

或者你可以使用分割函数写在另一个答案。

此处您的字符串已转换为日期和日历对象。现在你可以对物体做任何事情。

import java.io.IOException; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 

public class test { 
    public static void main(String[] args) throws IOException, ParseException { 
     String timestamp = "2017-09-13 00:01:00"; 
     DateFormat format = new SimpleDateFormat("yyyy-dd-mm HH:mm:ss"); 
     Date date = format.parse(timestamp); 
     System.out.println(date); 

     Calendar cal = Calendar.getInstance(); 
     cal.setTime(date); 

     System.out.println(date.getTime()); 
     System.out.println(date.getHours()); 
     System.out.println(date.getMinutes()); 
     System.out.println(date.getSeconds()); 
    } 
} 
2

使用DateTimeFormatter(java.time.format.DateTimeFormatter)和LocalDateTime

String s = "2017-09-13 00:01:00"; 

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 

    LocalTime start = LocalDateTime.parse(s,dtf).toLocalTime(); 
1

您需要使用新的Java API的日期时间。即配置正确的解析器。那就是:

String original = "2017-09-13 00:01:15"; 
DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
     .parseCaseInsensitive() 
     .append(DateTimeFormatter.ISO_LOCAL_DATE) 
     .appendLiteral(' ') // this is what you won't find among the default formatters 
     .append(DateTimeFormatter.ISO_LOCAL_TIME) 
     .toFormatter(); 
LocalTime time = LocalTime.parse(original, formatter); // it's cool now 
System.out.println(time); // prints 00:01:15 
0

如果格式yyyy-mm-dd hh:mm:ss是固定的,这很可能是最快的答案,到目前为止,因为它避免了任何一种添加字符串解析或分裂的:

LocalTime.parse(strings[0].substring(11))

+1

- 并且可读性最差? :-) –

+0

我不这么认为。简短的评论,它的可读性和可理解性。然而,它可能是错误的倾向,谁会注意到,如果11应该实际上是10;) – findusl

相关问题