📄 timeutil.java
字号:
* @param end end date
* @return true if all day (00:00-00:00 next day)
*/
static public boolean isAllDay (Timestamp start, Timestamp end)
{
GregorianCalendar calStart = new GregorianCalendar();
calStart.setTimeInMillis(start.getTime());
GregorianCalendar calEnd = new GregorianCalendar();
calEnd.setTimeInMillis(end.getTime());
if (calStart.get(Calendar.HOUR_OF_DAY) == calEnd.get(Calendar.HOUR_OF_DAY)
&& calStart.get(Calendar.MINUTE) == calEnd.get(Calendar.MINUTE)
&& calStart.get(Calendar.SECOND) == calEnd.get(Calendar.SECOND)
&& calStart.get(Calendar.MILLISECOND) == calEnd.get(Calendar.MILLISECOND)
&& calStart.get(Calendar.HOUR_OF_DAY) == 0
&& calStart.get(Calendar.MINUTE) == 0
&& calStart.get(Calendar.SECOND) == 0
&& calStart.get(Calendar.MILLISECOND) == 0
&& start.before(end))
return true;
//
return false;
} // isAllDay
/**
* Calculate the number of days between start and end.
* @param start start date
* @param end end date
* @return number of days (0 = same)
*/
static public int getDaysBetween (Timestamp start, Timestamp end)
{
boolean negative = false;
if (end.before(start))
{
negative = true;
Timestamp temp = start;
start = end;
end = temp;
}
//
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(start);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
GregorianCalendar calEnd = new GregorianCalendar();
calEnd.setTime(end);
calEnd.set(Calendar.HOUR_OF_DAY, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MILLISECOND, 0);
// System.out.println("Start=" + start + ", End=" + end + ", dayStart=" + cal.get(Calendar.DAY_OF_YEAR) + ", dayEnd=" + calEnd.get(Calendar.DAY_OF_YEAR));
// in same year
if (cal.get(Calendar.YEAR) == calEnd.get(Calendar.YEAR))
{
if (negative)
return (calEnd.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_YEAR)) * -1;
return calEnd.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_YEAR);
}
// not very efficient, but correct
int counter = 0;
while (calEnd.after(cal))
{
cal.add (Calendar.DAY_OF_YEAR, 1);
counter++;
}
if (negative)
return counter * -1;
return counter;
} // getDatesBetrween
/**
* Return Day + offset (truncates)
* @param day Day
* @param offset day offset
* @return Day + offset at 00:00
*/
static public Timestamp addDays (Timestamp day, int offset)
{
if (day == null)
day = new Timestamp(System.currentTimeMillis());
//
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(day);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
if (offset == 0)
return new Timestamp (cal.getTimeInMillis());
cal.add(Calendar.DAY_OF_YEAR, offset); // may have a problem with negative (before 1/1)
return new Timestamp (cal.getTimeInMillis());
} // addDays
/**
* Return DateTime + offset in minutes
* @param dateTime Date and Time
* @param offset minute offset
* @return dateTime + offset in minutes
*/
static public Timestamp addMinutess (Timestamp dateTime, int offset)
{
if (dateTime == null)
dateTime = new Timestamp(System.currentTimeMillis());
if (offset == 0)
return dateTime;
//
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(dateTime);
cal.add(Calendar.MINUTE, offset); // may have a problem with negative
return new Timestamp (cal.getTimeInMillis());
} // addMinutes
/**************************************************************************
* Format Elapsed Time
* @param start start time or null for now
* @param end end time or null for now
* @return formatted time string 1'23:59:59.999
*/
public static String formatElapsed (Timestamp start, Timestamp end)
{
long startTime = 0;
if (start == null)
startTime = System.currentTimeMillis();
else
startTime = start.getTime();
//
long endTime = 0;
if (end == null)
endTime = System.currentTimeMillis();
else
endTime = end.getTime();
return formatElapsed(endTime-startTime);
} // formatElapsed
/**
* Format Elapsed Time until now
* @param start start time
* @return formatted time string 1'23:59:59.999
*/
public static String formatElapsed (Timestamp start)
{
if (start == null)
return "NoStartTime";
long startTime = start.getTime();
long endTime = System.currentTimeMillis();
return formatElapsed(endTime-startTime);
} // formatElapsed
/**
* Format Elapsed Time
* @param elapsedMS time in ms
* @return formatted time string 1'23:59:59.999 - d'hh:mm:ss.xxx
*/
public static String formatElapsed (long elapsedMS)
{
if (elapsedMS == 0)
return "0";
StringBuffer sb = new StringBuffer();
if (elapsedMS < 0)
{
elapsedMS = - elapsedMS;
sb.append("-");
}
//
long miliSeconds = elapsedMS%1000;
elapsedMS = elapsedMS / 1000;
long seconds = elapsedMS%60;
elapsedMS = elapsedMS / 60;
long minutes = elapsedMS%60;
elapsedMS = elapsedMS / 60;
long hours = elapsedMS%24;
long days = elapsedMS / 24;
//
if (days != 0)
sb.append(days).append("'");
// hh
if (hours != 0)
sb.append(get2digits(hours)).append(":");
else if (days != 0)
sb.append("00:");
// mm
if (minutes != 0)
sb.append(get2digits(minutes)).append(":");
else if (hours != 0 || days != 0)
sb.append("00:");
// ss
sb.append(get2digits(seconds))
.append(".").append(miliSeconds);
return sb.toString();
} // formatElapsed
/**
* Get Minimum of 2 digits
* @param no number
* @return String
*/
private static String get2digits (long no)
{
String s = String.valueOf(no);
if (s.length() > 1)
return s;
return "0" + s;
} // get2digits
/**
* Is it valid today?
* @param validFrom valid from
* @param validTo valid to
* @return true if walid
*/
public static boolean isValid (Timestamp validFrom, Timestamp validTo)
{
return isValid (validFrom, validTo, new Timestamp (System.currentTimeMillis()));
} // isValid
/**
* Is it valid on test date
* @param validFrom valid from
* @param validTo valid to
* @param testDate Date
@return true if walid
*/
public static boolean isValid (Timestamp validFrom, Timestamp validTo, Timestamp testDate)
{
if (testDate == null)
return true;
if (validFrom == null && validTo == null)
return true;
// (validFrom) ok
if (validFrom != null && validFrom.after(testDate))
return false;
// ok (validTo)
if (validTo != null && validTo.before(testDate))
return false;
return true;
} // isValid
/**
* Max date
* @param ts1 p1
* @param ts2 p2
* @return max time
*/
public static Timestamp max (Timestamp ts1, Timestamp ts2)
{
if (ts1 == null)
return ts2;
if (ts2 == null)
return ts1;
if (ts2.after(ts1))
return ts2;
return ts1;
} // max
public static final String TRUNC_DAY = "D";
public static final String TRUNC_WEEK = "W";
public static final String TRUNC_MONTH = "MM";
public static final String TRUNC_QUARTER = "Q";
public static final String TRUNC_YEAR = "Y";
/**
* Get truncated day/time
* @param dayTime day
* @return next day with 00:00
*/
static public Timestamp trunc (Timestamp dayTime, String trunc)
{
if (dayTime == null)
dayTime = new Timestamp(System.currentTimeMillis());
GregorianCalendar cal = new GregorianCalendar(Language.getLoginLanguage().getLocale());
cal.setTimeInMillis(dayTime.getTime());
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
// D
cal.set(Calendar.HOUR_OF_DAY, 0);
if (trunc == null || trunc.equals(TRUNC_DAY))
return new Timestamp (cal.getTimeInMillis());
// W
if (trunc.equals(TRUNC_WEEK))
{
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
return new Timestamp (cal.getTimeInMillis());
}
// MM
cal.set(Calendar.DAY_OF_MONTH, 1);
if (trunc.equals(TRUNC_MONTH))
return new Timestamp (cal.getTimeInMillis());
// Q
if (trunc.equals(TRUNC_QUARTER))
{
int mm = cal.get(Calendar.MONTH);
if (mm < 4)
mm = 1;
else if (mm < 7)
mm = 4;
else if (mm < 10)
mm = 7;
else
mm = 10;
cal.set(Calendar.MONTH, mm);
return new Timestamp (cal.getTimeInMillis());
}
cal.set(Calendar.DAY_OF_YEAR, 1);
return new Timestamp (cal.getTimeInMillis());
} // trunc
/**
* Test
* @param args ignored
*/
public static void main (String[] args)
{
Timestamp t1 = getDay(01, 01, 01);
Timestamp t2 = getDay(02, 02, 02);
Timestamp t3 = getDay(03, 03, 03);
System.out.println(t1 + " - " + t3);
System.out.println(t2 + " - " + isValid (t1,t3, t2));
} // main
} // TimeUtil
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -