Je construis une méthode Java pour additionner deux périodes de temps, en utilisant la librairie JodaTime. Mon code fonctionne bien, mais je pense qu'il est possible d'optimiser pour réduire l'exécution du temps ... Malheureusement, je suis nouveau sur JodaTime.Comment puis-je optimiser ce code? (JodaTime requis)
Ceci est mon code:
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;
}
}
Merci !! :)
Cette question semble mieux convenir à [Code Review] (http://codereview.stackexchange.com/). Bien que je suggère de réduire les exigences d'optimisation. – Mena
Si vous voulez additionner deux périodes, pourquoi utilisez-vous des chaînes? Pourquoi n'utilisez-vous pas la classe 'Period' de Joda Time pour * tout *? L'entrée de votre méthode 'sum' devrait être deux périodes, IMO. (Ou deux durées possibles - on ne sait pas quelle est votre situation réelle.) Vous pouvez alors séparer l'analyse de période/durée. –
merci pour votre soutien! de toute façon, j'utilise deux chaînes car l'entrée provient d'une base de données ... et les données sont stockées telles quelles. – user3449772