有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java解析字符串到日期对象更改值

为了将时间格式(从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(转换后)

我只想更改格式,而不是同时更改格式和值
有什么办法吗


共 (3) 个答案

  1. # 1 楼答案

    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)
    

    和导入库:

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

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

  2. # 2 楼答案

    将1:70:00转换为日期对象时,您希望看到什么?日期只能保存有效值,1:70:00无效

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

  3. # 3 楼答案

    当你解析一个像“1:70”这样的时间字符串时,Java计算出标准时间为“2:10”。 由于您不希望重新计算此类时间,只需使用以下格式重新格式化:

    • 下降秒数
    • 添加填充零

    最好使用字符串操作。例如:

        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"