1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.tradefed.util;
17 
18 import java.text.SimpleDateFormat;
19 import java.util.Date;
20 import java.util.TimeZone;
21 import java.util.concurrent.TimeUnit;
22 
23 /**
24  * Contains time related utility methods.
25  */
26 public class TimeUtil {
27 
28     // only static methods, don't allow construction
TimeUtil()29     private TimeUtil() {
30     }
31 
32     /**
33      * Return a prettified version of the given elapsed time in milliseconds.
34      */
formatElapsedTime(long elapsedTimeMs)35     public static String formatElapsedTime(long elapsedTimeMs) {
36         if (elapsedTimeMs < 1000) {
37             return String.format("%d ms", elapsedTimeMs);
38         }
39         long seconds = TimeUnit.MILLISECONDS.toSeconds(elapsedTimeMs) % 60;
40         long minutes = TimeUnit.MILLISECONDS.toMinutes(elapsedTimeMs) % 60;
41         long hours = TimeUnit.MILLISECONDS.toHours(elapsedTimeMs);
42         StringBuilder time = new StringBuilder();
43         if (hours > 0) {
44             time.append(hours);
45             time.append("h ");
46         }
47         if (minutes > 0) {
48             time.append(minutes);
49             time.append("m ");
50         }
51         time.append(seconds);
52         time.append("s");
53 
54         return time.toString();
55     }
56 
57     /**
58      * Return a readable formatted version of the given epoch time.
59      *
60      * @param epochTime the epoch time in milliseconds
61      * @return a user readable string
62      */
formatTimeStamp(long epochTime)63     public static String formatTimeStamp(long epochTime) {
64         return formatTimeStamp(epochTime, null);
65     }
66 
67     /**
68      * Internal helper to print a time with the given date format, or a default format if none
69      * is provided.
70      */
formatTimeStamp(long epochTime, SimpleDateFormat format)71     private static String formatTimeStamp(long epochTime, SimpleDateFormat format) {
72         if (format == null) {
73             format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
74         }
75         return format.format(new Date(epochTime));
76     }
77 
78     /**
79      * Return a readable formatted version of the given epoch time in GMT time instead of the local
80      * timezone.
81      *
82      * @param epochTime the epoch time in milliseconds
83      * @return a user readable string
84      */
formatTimeStampGMT(long epochTime)85     public static String formatTimeStampGMT(long epochTime) {
86         SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
87         timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
88         return formatTimeStamp(epochTime, timeFormat);
89     }
90 }
91