要更改时间格式(从HH:mm:ss
到HH: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
(转换后)我只想更改格式而不是更改格式和值 有没有办法这样做?
答案 0 :(得分:1)
将1:70:00转换为Date对象时,您会期望什么?日期只能包含有效值,而1:70:00无效。
这是预期的。如果您需要不同的行为,那么您应该编写自己的格式化程序,将String转换为String。
答案 1 :(得分:1)
当您解析类似" 1:70"的时间字符串时,Java会根据" 2:10"计算规范时间。 由于您不希望这样的时间重新计算,只需重新格式化:
使用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>