【问题标题】:How calculate negative period using JodaTime如何使用 JodaTime 计算负周期
【发布时间】:2014-06-25 06:59:33
【问题描述】:

我正在构建一个 Android 应用,我需要计算一个时间段(小时和分钟)的总和。实际上,我构建了一种方法来实现这一点,但我遇到了负周期问题。

例如:

第一种情况-->正确

Input 1: 3:00
Input 2: 0:30

Output: 3:30 // This is correct --> 3:00 + 0:30 = 3:30

第二种情况-->错了

Input 1: 3:00
Input 2: -0:30

Output: 3:30 // This is wrong...

Output Expected: 2:30 // --> 3:00 + (-0:30) = 2:30

这是我的代码:

public String OperationsHH_Sum(String time1, String time2)
    {
        PeriodFormatterBuilder builder = new PeriodFormatterBuilder();
        builder.minimumPrintedDigits(2);
        builder.printZeroAlways();
        builder.appendHours();
        builder.appendLiteral(":");
        builder.appendMinutes();
        PeriodFormatter pf = builder.toFormatter();

        Period period1 = pf.parsePeriod(time1);
        Period period2 = pf.parsePeriod(time2);
        Period normalized;
        Period total;

        total = period1.plus(period2);
        normalized = total.normalizedStandard(PeriodType.time());

        return pf.print(normalized);
    }

我做错了什么?

谢谢!!

编辑:

我解决了我的问题...这是代码:

public String OperationsHH_Sum(String time1, String time2)
    {

        String[] time1_out, time2_out;

        if (time1.contains("-"))
        {
            time1_out = time1.split(":");
            time1_out[1] = "-" + time1_out[1];
            time1 = time1_out[0] + ":" + time1_out[1];
        }

        if (time2.contains("-"))
        {
            time2_out = time1.split(":");
            time2_out[1] = "-" + time2_out[1];
            time2 = time2_out[0] + ":" + time2_out[1];
        }

        PeriodFormatterBuilder builder = new PeriodFormatterBuilder();
        builder.minimumPrintedDigits(2);
        builder.printZeroAlways();
        builder.appendHours();
        builder.appendLiteral(":");
        builder.appendMinutes();
        PeriodFormatter pf = builder.toFormatter();

        Period period1 = pf.parsePeriod(time1);
        Period period2 = pf.parsePeriod(time2);
        Period zero = pf.parsePeriod("0:00");
        Period normalized;
        Period total;

        total = period1.plus(period2);
        boolean negative = false;

        if (total.toStandardDuration().isShorterThan(zero.toStandardDuration()))
        {
            negative = true;
        }
        normalized = total.normalizedStandard(PeriodType.time());

        return (negative ? "-" : "") + pf.print(normalized);
    }

【问题讨论】:

    标签: java android datetime jodatime period


    【解决方案1】:

    问题在于字符串的解析。在 YodaTime 中,负值表示为 -HH:-MM,因此您的 -0:30 表示“减去零小时,加上 30 分钟”,与 00:30 相同。

    要解决您的问题,您可以做以下两件事之一:

    1. 以预期格式写入负数,表示“-HH:-MM”,例如“-0:-30”
    2. 在解析之前删除负号,并自行决定是否应该添加或删除它。

    【讨论】:

    • 感谢您的回复! :) 所以,我可以管理您的第一个解决方案。但是,如何检索“-HH:-MM”格式的总数?
    • 我不太确定你的意思是什么,如果你打电话给例如OperationsHH_Sum("03:00", "-04:-30")输出将是-01:-30这是你想要的,还是你的意思是如何得到减号只在前面像-01:30
    • 谢谢哥们!!我解决了这个问题!检查主帖子以查看修复... :)
    猜你喜欢
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2021-08-19
    • 2022-11-22
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多