替换java

时间:2018-03-24 12:43:43

标签: java datetime

我有一个旧的字符串值,如下所示

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

我应该在?中添加什么?

4 个答案:

答案 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;
}