解析String到Date对象更改的值

时间:2014-12-15 06:57:15

标签: java datetime

要更改时间格式(从HH:mm:ssHH:mm),我使用了以下代码段。

Date dateObj = new SimpleDateFormat("HH:mm:ss").parse(time);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
String time = simpleDateFormat.format(dateObj);  

当我使用正确的时间进行测试时,它可以正确更改格式 但是,当我用错误的时间进行测试时,它不仅会改变格式,还会改变时间本身 例如,

  • 1:70:00 => 02:10(转换后)
  • 27:00:00 => 03:00(转换后)

我只想更改格式而不是更改格式和值 有没有办法这样做?

3 个答案:

答案 0 :(得分:1)

将1:70:00转换为Date对象时,您会期望什么?日期只能包含有效值,而1:70:00无效。

这是预期的。如果您需要不同的行为,那么您应该编写自己的格式化程序,将String转换为String。

答案 1 :(得分:1)

当您解析类似" 1:70"的时间字符串时,Java会根据" 2:10"计算规范时间。 由于您不希望这样的时间重新计算,只需重新格式化:

  • drop seconds
  • 添加填充零

使用String操作更好。例如:

    String str = "1:70:00";
    String[] parts = str.split(":");
    String newFormat = String.format("%02d:%02d", Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
    // will be: "01:70"

答案 2 :(得分:0)

import java.util.Locale;
import org.joda.time.MutablePeriod;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;
import org.joda.time.format.PeriodParser;

public class APP3 {

    public static void main(String[] args) {
        PeriodFormatterBuilder builder = new PeriodFormatterBuilder();
        builder.printZeroAlways()
                .minimumPrintedDigits(2)
                .appendHours()
                .appendSeparator(":").appendMinutes();

        PeriodFormatter formatter = builder.toFormatter();
        PeriodParser parser = builder.toParser();

        String time = "27:70:00";
        MutablePeriod mp = new MutablePeriod();
        parser.parseInto(mp, time, 0, Locale.getDefault());

        System.out.println("Case 1 : "+formatter.print(mp));

        int hours = mp.getMinutes()/ 60;
        int minutes = mp.getMinutes() % 60;
        mp.setHours(mp.getHours()+hours);
        mp.setMinutes(minutes);

        System.out.println("Case 2 : "+formatter.print(mp));

    }
}

输出

run:
Case 1 : 27:70
Case 2 : 28:10
BUILD SUCCESSFUL (total time: 1 second)

并导入lib:

<dependency>
  <groupId>joda-time</groupId>
  <artifactId>joda-time</artifactId>
  <version>2.6</version>
</dependency>

参考:joda-time http://joda-time.sourceforge.net