158 lines
4.9 KiB
Java
158 lines
4.9 KiB
Java
package androidx.core.util;
|
|
|
|
import androidx.annotation.RestrictTo;
|
|
import java.io.PrintWriter;
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public final class TimeUtils {
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static final int HUNDRED_DAY_FIELD_LEN = 19;
|
|
private static final int SECONDS_PER_DAY = 86400;
|
|
private static final int SECONDS_PER_HOUR = 3600;
|
|
private static final int SECONDS_PER_MINUTE = 60;
|
|
private static char[] sFormatStr = new char[24];
|
|
private static final Object sFormatSync = new Object();
|
|
|
|
private TimeUtils() {
|
|
}
|
|
|
|
private static int accumField(int i, int i2, boolean z2, int i3) {
|
|
if (i > 99 || (z2 && i3 >= 3)) {
|
|
return i2 + 3;
|
|
}
|
|
if (i > 9 || (z2 && i3 >= 2)) {
|
|
return i2 + 2;
|
|
}
|
|
if (z2 || i > 0) {
|
|
return i2 + 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static void formatDuration(long j, long j2, PrintWriter printWriter) {
|
|
if (j == 0) {
|
|
printWriter.print("--");
|
|
} else {
|
|
formatDuration(j - j2, printWriter, 0);
|
|
}
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static void formatDuration(long j, PrintWriter printWriter) {
|
|
formatDuration(j, printWriter, 0);
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static void formatDuration(long j, PrintWriter printWriter, int i) {
|
|
synchronized (sFormatSync) {
|
|
printWriter.print(new String(sFormatStr, 0, formatDurationLocked(j, i)));
|
|
}
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static void formatDuration(long j, StringBuilder sb) {
|
|
synchronized (sFormatSync) {
|
|
sb.append(sFormatStr, 0, formatDurationLocked(j, 0));
|
|
}
|
|
}
|
|
|
|
private static int formatDurationLocked(long j, int i) {
|
|
char c2;
|
|
int i2;
|
|
int i3;
|
|
int i4;
|
|
int i5;
|
|
int i6;
|
|
long j2 = j;
|
|
if (sFormatStr.length < i) {
|
|
sFormatStr = new char[i];
|
|
}
|
|
char[] cArr = sFormatStr;
|
|
int i7 = (j2 > 0 ? 1 : (j2 == 0 ? 0 : -1));
|
|
if (i7 == 0) {
|
|
int i8 = i - 1;
|
|
while (i8 > 0) {
|
|
cArr[0] = ' ';
|
|
}
|
|
cArr[0] = '0';
|
|
return 1;
|
|
}
|
|
if (i7 > 0) {
|
|
c2 = '+';
|
|
} else {
|
|
c2 = '-';
|
|
j2 = -j2;
|
|
}
|
|
int i9 = (int) (j2 % 1000);
|
|
int floor = (int) Math.floor((double) (j2 / 1000));
|
|
if (floor > 86400) {
|
|
i2 = floor / 86400;
|
|
floor -= 86400 * i2;
|
|
} else {
|
|
i2 = 0;
|
|
}
|
|
if (floor > 3600) {
|
|
i3 = floor / 3600;
|
|
floor -= i3 * 3600;
|
|
} else {
|
|
i3 = 0;
|
|
}
|
|
if (floor > 60) {
|
|
int i10 = floor / 60;
|
|
i4 = floor - (i10 * 60);
|
|
i5 = i10;
|
|
} else {
|
|
i4 = floor;
|
|
i5 = 0;
|
|
}
|
|
if (i != 0) {
|
|
int accumField = accumField(i2, 1, false, 0);
|
|
int accumField2 = accumField + accumField(i3, 1, accumField > 0, 2);
|
|
int accumField3 = accumField2 + accumField(i5, 1, accumField2 > 0, 2);
|
|
int accumField4 = accumField3 + accumField(i4, 1, accumField3 > 0, 2);
|
|
i6 = 0;
|
|
for (int accumField5 = accumField(i9, 2, true, accumField4 > 0 ? 3 : 0) + 1 + accumField4; accumField5 < i; accumField5++) {
|
|
cArr[i6] = ' ';
|
|
i6++;
|
|
}
|
|
} else {
|
|
i6 = 0;
|
|
}
|
|
cArr[i6] = c2;
|
|
int i11 = i6 + 1;
|
|
boolean z2 = i != 0;
|
|
int printField = printField(cArr, i2, 'd', i11, false, 0);
|
|
int printField2 = printField(cArr, i3, 'h', printField, printField != i11, z2 ? 2 : 0);
|
|
int printField3 = printField(cArr, i5, 'm', printField2, printField2 != i11, z2 ? 2 : 0);
|
|
int printField4 = printField(cArr, i4, 's', printField3, printField3 != i11, z2 ? 2 : 0);
|
|
int printField5 = printField(cArr, i9, 'm', printField4, true, (!z2 || printField4 == i11) ? 0 : 3);
|
|
cArr[printField5] = 's';
|
|
return printField5 + 1;
|
|
}
|
|
|
|
private static int printField(char[] cArr, int i, char c2, int i2, boolean z2, int i3) {
|
|
int i4;
|
|
if (!z2 && i <= 0) {
|
|
return i2;
|
|
}
|
|
if ((!z2 || i3 < 3) && i <= 99) {
|
|
i4 = i2;
|
|
} else {
|
|
int i5 = i / 100;
|
|
cArr[i2] = (char) (i5 + 48);
|
|
i4 = i2 + 1;
|
|
i -= i5 * 100;
|
|
}
|
|
if ((z2 && i3 >= 2) || i > 9 || i2 != i4) {
|
|
int i6 = i / 10;
|
|
cArr[i4] = (char) (i6 + 48);
|
|
i4++;
|
|
i -= i6 * 10;
|
|
}
|
|
cArr[i4] = (char) (i + 48);
|
|
int i7 = i4 + 1;
|
|
cArr[i7] = c2;
|
|
return i7 + 1;
|
|
}
|
|
}
|