我正在构建一个使用JodaTime库在算术上对两个时间段进行求和的Java方法。 我的代码工作正常,但我认为这是可能的优化,以减少时间执行... 不幸的是,我是新的JodaTime。如何优化此代码? (需要JodaTime)
这是我的代码:
import org.joda.time.Period;
import org.joda.time.PeriodType;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;
public class Test {
public static void main(String[] args)
{
String time1 = "08:00";
String time2 = "08:00";
System.out.println(Operation_Sum(time1,time2));
}
private static String Operation_Sum(String time1, String time2)
{
String output;
long start = System.currentTimeMillis();
if (time1.equals("00:00") && time2.equals("00:00"))
{
output = "00:00";
}
else if (time1.equals("00:00"))
{
output = time2;
}
else if (time2.equals("00:00"))
{
output = time1;
}
else
{
boolean sign_time1 = false;
boolean sign_time2 = false;
String[] time1_out, time2_out;
boolean negative = false;
String output_split[];
if (time1.contains("-"))
{
time1_out = time1.split(":");
time1_out[0] = time1_out[0].replace("-", "");
time1_out[1] = time1_out[1].replace("-", "");
time1 = time1_out[0] + ':' + time1_out[1];
sign_time1 = true;
}
if (time2.contains("-"))
{
time2_out = time2.split(":");
time2_out[0] = time2_out[0].replace("-", "");
time2_out[1] = time2_out[1].replace("-", "");
time2 = time2_out[0] + ':' + time2_out[1];
sign_time2 = true;
}
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 = null;
if (sign_time1 && sign_time2)
{
total = period1.plus(period2);
negative = true;
}
if (sign_time1 && !sign_time2)
{
total = period2.minus(period1);
}
if (!sign_time1 && sign_time2)
{
total = period1.minus(period2);
}
if (!sign_time1 && !sign_time2)
{
total = period1.plus(period2);
negative = false;
}
normalized = total.normalizedStandard(PeriodType.time());
output_split = pf.print(normalized).split(":");
if (output_split[1].contains("-"))
{
output = output_split[0] + ":" + output_split[1].replace("-", "");
}
else
{
output = (negative ? "-" : "") + output_split[0] + ":" + output_split[1];
}
}
long end = System.currentTimeMillis();
System.out.println("exec time sum1: " +(end - start) + " ms");
return output;
}
}
谢谢! :)
此问题似乎更适合[代码评论](http://codereview.stackexchange.com/)。虽然我建议缩小优化要求。 – Mena 2014-09-05 10:20:02
如果你想总结两个时期,你为什么要使用字符串?为什么你不使用乔达时间的'周期'类来处理*一切*? “sum”方法的输入应该是两个时间段,IMO。 (或者可能有两个持续时间 - 目前还不清楚你的真实情况是什么。)然后,你可以分离出周期/持续时间解析。 – 2014-09-05 10:21:11
感谢您的支持!无论如何,我使用两个字符串,因为输入来自数据库...并且数据按原样存储。 – user3449772 2014-09-05 10:25:27