2017-09-14 145 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

相關問題