package org.apache.archiva.common.utils; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * DateUtil - some (not-so) common date utility methods. * * */ public class DateUtil { public static String getDuration( long duration ) { return getDuration( new Date( 0 ), new Date( duration ) ); } public static String getDuration( long ms1, long ms2 ) { return getDuration( new Date( ms1 ), new Date( ms2 ) ); } public static String getDuration( Date d1, Date d2 ) { Calendar cal1 = new GregorianCalendar(); cal1.setTime( d1 ); Calendar cal2 = new GregorianCalendar(); cal2.setTime( d2 ); return getDuration( cal1, cal2 ); } public static String getDuration( Calendar cal1, Calendar cal2 ) { int year1 = cal1.get( Calendar.YEAR ); int day1 = cal1.get( Calendar.DAY_OF_YEAR ); int hour1 = cal1.get( Calendar.HOUR_OF_DAY ); int min1 = cal1.get( Calendar.MINUTE ); int sec1 = cal1.get( Calendar.SECOND ); int ms1 = cal1.get( Calendar.MILLISECOND ); int year2 = cal2.get( Calendar.YEAR ); int day2 = cal2.get( Calendar.DAY_OF_YEAR ); int hour2 = cal2.get( Calendar.HOUR_OF_DAY ); int min2 = cal2.get( Calendar.MINUTE ); int sec2 = cal2.get( Calendar.SECOND ); int ms2 = cal2.get( Calendar.MILLISECOND ); int leftDays = ( day1 - day2 ) + ( year1 - year2 ) * 365; int leftHours = hour2 - hour1; int leftMins = min2 - min1; int leftSeconds = sec2 - sec1; int leftMilliSeconds = ms2 - ms1; if ( leftMilliSeconds < 0 ) { leftMilliSeconds += 1000; --leftSeconds; } if ( leftSeconds < 0 ) { leftSeconds += 60; --leftMins; } if ( leftMins < 0 ) { leftMins += 60; --leftHours; } if ( leftHours < 0 ) { leftHours += 24; --leftDays; } StringBuilder interval = new StringBuilder(); appendInterval( interval, leftDays, "Day" ); appendInterval( interval, leftHours, "Hour" ); appendInterval( interval, leftMins, "Minute" ); appendInterval( interval, leftSeconds, "Second" ); appendInterval( interval, leftMilliSeconds, "Millisecond" ); return interval.toString(); } private static void appendInterval( StringBuilder interval, int count, String type ) { if ( count > 0 ) { if ( interval.length() > 0 ) { interval.append( " " ); } interval.append( count ); interval.append( " " ).append( type ); if ( count > 1 ) { interval.append( "s" ); } } } }