如何为包含字符串的日期和时间转换为LOCALTIME可变
我被转换其含有的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
可以使用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);
你可能只使用String#split如果你确定字符串的格式已经是相同的。
String s = "2017-09-13 00:01:00";
String[] frags = s.split(" ");
System.out.println(frags[frags.length - 1]);
输出:
00:01:00
添加一些检查,如果你需要。
这可以帮助你::
或者你可以使用分割函数写在另一个答案。
此处您的字符串已转换为日期和日历对象。现在你可以对物体做任何事情。
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());
}
}
使用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();
您需要使用新的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
如果格式yyyy-mm-dd hh:mm:ss
是固定的,这很可能是最快的答案,到目前为止,因为它避免了任何一种添加字符串解析或分裂的:
LocalTime.parse(strings[0].substring(11))
- 并且可读性最差? :-) –
我不这么认为。简短的评论,它的可读性和可理解性。然而,它可能是错误的倾向,谁会注意到,如果11应该实际上是10;) – findusl
这个工作非常感谢。 –
@SeanMcGrath不客气,很高兴帮助! – 2017-09-14 12:42:31