我有一个旧的字符串值,如下所示
2018-03-21 00:00:00.0
我想将时间更改为23:18:19
,但将日期保持为2018-03-21.
因此新值将为2018-03-21 23:18:19
。
这就是我试过的
System.out.println("date is " + date); // 2018-03-21 00:00:00.0
String[] parts = date.split(" ");
System.out.println("Date: " + parts[0]); // 2018-03-21
System.out.println("Time is : " + parts[1]); // 00:00:00.0
String replaceString=parts[1].replace(?,'23:18:19');
System.out.println("Value is : " + replaceString); //2018-03-21 23:18:19
我应该在?
中添加什么?
答案 0 :(得分:3)
使用DateTimeFormatter
可能是最好的方法。根本不涉及令人讨厌的字符串操作。
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral(' ')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.toFormatter();
LocalDateTime oldTime = LocalDateTime.parse("2018-03-21 00:00:00.0", formatter);
LocalDateTime newTime = oldTime.withHour(23).withMinute(18).withSecond(19).withNano(0);
System.out.println(newTime.format(formatter));
输出:2018-03-21 23:18:19
答案 1 :(得分:3)
使用迈克尔建议的相同格式化程序,但设置时间的代码稍短:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral(' ')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.toFormatter();
LocalDateTime dt = LocalDate.parse("2018-03-21 00:00:00.0", formatter)
.atTime(LocalTime.of(23, 18, 19));
System.out.println(dt.format(formatter));
解析为LocalDate
,您忽略了您不想要的部分,即00:00:00部分。然后使用atTime
在一个步骤中设置所需的时间。这比Michael的回答更有效,因为对withXXX
方法的每次调用都会创建另一个对象。但不确定这是否会对您的代码产生重大影响。
如果您有字符串而不是时间数值,则可以使用LocalTime.parse("23:18:19")
代替LocalTime.of
。
您可以看到运行的代码: https://ideone.com/STduWa
使用java.time类比替换字符串更好,因为它还验证输入,例如范围之外的数值(如果输入是" 99:99:99",替换不会验证它,而java.time类会这样做。)
答案 2 :(得分:1)
我没有测试过这段代码,但是这样的代码应该可以运行..
Calendar mydate = new GregorianCalendar();
String dateString = "2018-03-21 00:00:00.0";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S, , Locale.ENGLISH);
Date thedate = LocalDate.parse(dateString, formatter); // As suggested by Michael
//LocalDate thedate = LocalDate.parse(dateString, formatter);
mydate.setTime(thedate);
然后使用
设置您要设置的内容mydate.set(Calendar.HOUR_OF_DAY,"23"));
mydate.set(Calendar.MINUTE,"18");
mydate.set(Calendar.SECOND,"19");
答案 3 :(得分:0)
public static String test(){
String date = "2018-03-21 00:00:00.0";
System.out.println("date is " + date); // 2018-03-21 00:00:00.0
String[] parts = date.split(" ");
System.out.println("Date: " + parts[0]); // 2018-03-21
System.out.println("Time is : " + parts[1]); // 00:00:00.0
String replaceString=date.replace(parts[1],"23:18:19");
System.out.println("Value is : " + replaceString); //2018-03-21 00:00:00.0
return replaceString;
}