|
What this is
Other links
The source code
/*
* $Header: /cvsroot/mvnforum/myvietnam/src/net/myvietnam/mvncore/util/DateUtil.java,v 1.27 2005/02/04 03:53:08 minhnn Exp $
* $Author: minhnn $
* $Revision: 1.27 $
* $Date: 2005/02/04 03:53:08 $
*
* ====================================================================
*
* Copyright (C) 2002-2005 by MyVietnam.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* All copyright notices regarding MyVietnam and MyVietnam CoreLib
* MUST remain intact in the scripts and source code.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Correspondence and Marketing Questions can be sent to:
* info@MyVietnam.net
*
* @author: Minh Nguyen minhnn@MyVietnam.net
* @author: Mai Nguyen mai.nh@MyVietnam.net
*/
package net.myvietnam.mvncore.util;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
import net.myvietnam.mvncore.MVNCoreConfig;
/**
* @todo: add config option to this class
*/
public final class DateUtil {
public static final long SECOND = 1000;
public static final long MINUTE = SECOND * 60;
public static final long HOUR = MINUTE * 60;
public static final long DAY = HOUR * 24;
public static final long WEEK = DAY * 7;
public static final long YEAR = DAY * 365; // or 366 ???
/**
* This is the time difference between GMT time and Vietnamese time
*/
public static final long GMT_VIETNAM_TIME_OFFSET = HOUR * 7;
/**
* RFC 822 date format
*/
public static final String RFC_822_DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z";
//public static final String RFC_822_DATE_FORMAT = "EEE, d MMM yyyy HH:mm:ss Z";
/**
* ISO 8601 [W3CDTF] date format
*/
public static final String ISO_8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
/**
* UTC style date format
*/
public static final String UTC_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
/**
* This is the time difference between GMT time and SERVER time
*/
//private static long SERVER_TIME_OFFSET = HOUR * (new DateOptions()).serverHourOffset;
private static DateFormat ddMMyyyyFormat = new SimpleDateFormat("dd/MM/yyyy");
private static DateFormat yyyyMMddFormat = new SimpleDateFormat("yyyy-MM-dd");
private static DateFormat rfc822Format = new SimpleDateFormat(RFC_822_DATE_FORMAT, Locale.US);
private static DateFormat iso8601Format = new SimpleDateFormat(ISO_8601_DATE_FORMAT, Locale.US);
private static DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);
private static DateFormat datetimeFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);
private static DateFormat headerTimeFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
static {
TimeZone gmt = TimeZone.getTimeZone("GMT");
headerTimeFormat.setTimeZone(gmt);
}
/**
* private constructor
*/
private DateUtil() {// prevent instantiation
}
public static synchronized String getDateDDMMYYYY(Date date) {
return ddMMyyyyFormat.format(date);
}
public static synchronized String getDateYYYYMMDD(Date date) {
return yyyyMMddFormat.format(date);
}
public static synchronized String getDateRFC822(Date date) {
return rfc822Format.format(date);
}
public static synchronized String getDateISO8601(Date date) {
return iso8601Format.format(date);
}
public static synchronized String getHTTPHeaderTime(Date date) {
return headerTimeFormat.format(date);
}
public static synchronized String formatDate(Date date) {
return dateFormat.format(date);
}
public static synchronized String formatDateTime(Date date) {
return datetimeFormat.format(date);
}
public static Timestamp getCurrentGMTTimestamp() {
return new Timestamp(System.currentTimeMillis() - (HOUR * MVNCoreConfig.getServerHourOffset()));
}
public static void updateCurrentGMTTimestamp(Timestamp timeToUpdate) {
timeToUpdate.setTime(System.currentTimeMillis() - (HOUR * MVNCoreConfig.getServerHourOffset()));
}
public static Date getVietnamDateFromGMTDate(Date date) {
return new Date(date.getTime() + GMT_VIETNAM_TIME_OFFSET);
}
public static Date convertGMTDate(Date gmtDate, int hourOffset) {
return new Date(gmtDate.getTime() + hourOffset*HOUR);
}
public static Timestamp convertGMTTimestamp(Timestamp gmtTimestamp, int hourOffset) {
return new Timestamp(gmtTimestamp.getTime() + hourOffset*HOUR);
}
public static Timestamp getCurrentGMTTimestampExpiredYear(int offsetYear) {
//return new Timestamp(System.currentTimeMillis() + offsetYear*(365*24*60*60*1000));
Calendar now = Calendar.getInstance();
now.add(Calendar.YEAR, offsetYear);
return new Timestamp(now.getTime().getTime());
}
public static Timestamp getCurrentGMTTimestampExpiredMonth(int offsetMonth) {
Calendar now = Calendar.getInstance();
now.add(Calendar.MONTH, offsetMonth);
return new Timestamp(now.getTime().getTime());
}
public static Timestamp getCurrentGMTTimestampExpiredDay(int offsetDay) {
Calendar now = Calendar.getInstance();
now.add(Calendar.DATE,offsetDay);
return new Timestamp(now.getTime().getTime());
}
public static String format(Date date, String pattern) {
DateFormat formatter = new SimpleDateFormat (pattern, Locale.US);
return formatter.format(date);
}
public static String formatDuration(long duration, String pattern) {
DurationFormater time = new DurationFormater(duration, pattern);
return time.toString();
}
public static String formatDuration(long duration) {
DurationFormater time = new DurationFormater(duration, null);
return time.toString();
}
public static void main (String[] agrs) {
long duration = (long)1000 * 60 * 60 *24 * 130 + (long)1000 * 60 * 80;
System.out.println(duration);
System.out.println("Duration of " + duration + " duration = " + formatDuration(duration));
}
}
class DurationFormater {
public static final long MILISECONDS_PER_SECOND = 1000;
public static final long SECONDS_PER_MINUTE = 60;
public static final long MINUTES_PER_HOUR = 60;
public static final long HOURS_PER_DAY = 24;
public static final int MILISECOND = 0;
public static final int SECOND = 1;
public static final int MINUTE = 2;
public static final int HOUR = 3;
public static final int DAY = 4;
public static final String PATTERNS[] = {
"@ms", "@s", "@m", "@h", "@d"
};
private static final long[] AMOUNTS = {
MILISECONDS_PER_SECOND,
SECONDS_PER_MINUTE,
MINUTES_PER_HOUR,
HOURS_PER_DAY
};
private static long[] times = new long[5];
private long time;
private String pattern;
private boolean detail = false;
public DurationFormater() {
}
public DurationFormater(long time, String pattern) {
this.time = time;
this.pattern = pattern;
update();
}
public DurationFormater(long time) {
this.time = time;
update();
}
private void update() {
long remain = time;
for (int i = 0; i < AMOUNTS.length; i++) {
times[i] = remain % AMOUNTS[i];
remain = remain / AMOUNTS[i];
}
times[DAY] = (int) remain;
}
/* @h
* @M --> Month
* @m --> minute
* @ms --> milisecond
* @s --> second
*/
public void setPattern(String pattern) {
this.pattern = pattern;
}
public long getTime() {
return time;
}
public void setTime(long duration) {
time = duration;
update();
}
public long getMiliseconds() {
return times[MILISECOND];
}
public long getSeconds() {
return times[SECOND];
}
public long getMinutes() {
return times[MINUTE];
}
public long getHours() {
return times[HOUR];
}
public long getDays() {
return times[DAY];
}
public void setDetail(boolean detail) {
this.detail = detail;
}
public String getString() {
StringBuffer buffer = new StringBuffer(1024);
buffer.append(pattern);
for (int i = 0; i < PATTERNS.length; i++) {
int start = -1;
int end = -1;
// Note, in JDK 1.3, StringBuffer does not have method indexOf
while ((start = buffer.toString().indexOf(PATTERNS[i])) > -1) {
end = start + PATTERNS[i].length();
buffer.replace(start, end, String.valueOf(times[i]));
}
}
return buffer.toString();
}
public String toString() {
if (pattern != null) {
return getString();
}
StringBuffer desc = new StringBuffer(256);
if (times[DAY] > 0) {
desc.append(checkPlural(times[DAY], "day"));
}
if (times[HOUR] > 0) {
desc.append(checkPlural(times[HOUR], "hour"));
}
if ((times[MINUTE] > 0) || (times[DAY] == 0 && times[MINUTE] == 0)) {
desc.append(checkPlural(times[MINUTE], "minute"));
}
if (detail) {
desc.append(checkPlural(times[SECOND], "second"));
desc.append(checkPlural(times[MILISECOND], "milisecond"));
}
return desc.toString();
}
private static String checkPlural(long amount, String unit) {
StringBuffer desc = new StringBuffer(20);
desc.append(amount).append(" ").append(unit);
if (amount > 1) {
desc.append("s");
}
return desc.append(" ").toString();
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.