/* * Copyright 2015 the original author or authors. * @https://github.com/scouter-project/scouter * * Licensed 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. */ package scouter.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Hashtable; import java.util.Locale; public class DateUtil { public static final long MILLIS_PER_SECOND = 1000; public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND; public static final long MILLIS_PER_FIVE_MINUTE = 5 * 60 * MILLIS_PER_SECOND; public static final long MILLIS_PER_TEN_MINUTE = 10 * MILLIS_PER_MINUTE; public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE; public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR; public static final int SECONDS_PER_DAY = (int) (MILLIS_PER_DAY / 1000); public final static DateTimeHelper helper = DateTimeHelper.getDefault(); public static String datetime(long time) { return helper.datetime(time); } public static String timestamp(long time) { return helper.timestamp(time); } public static String yyyymmdd(long time) { return helper.yyyymmdd(time); } public static long getDateUnit() { return helper.getDateUnit(); } public static long getDateUnit(long time) { return helper.getDateUnit(time); } public static String ymdhms(long time) { return helper.yyyymmdd(time) + helper.hhmmss(time); } public static String hhmmss(long time) { return helper.hhmmss(time); } public static String hhmm(long now) { return helper.hhmm(now); } public static String yyyymmdd() { return helper.yyyymmdd(System.currentTimeMillis()); } public static String getLogTime(long time) { return helper.logtime(time); } public static long yyyymmdd(String date) { return helper.yyyymmdd(date); } public static long hhmm(String date) { return helper.hhmm(date); } public static long getTime(String date, String format) { if (format.equals("yyyyMMdd")) return helper.yyyymmdd(date); try { SimpleDateFormat sdf = parsers.get(format); if (sdf == null) { sdf = new SimpleDateFormat(format); parsers.put(format, sdf); } synchronized (sdf) { return sdf.parse(date).getTime(); } } catch (ParseException e) { return 0; } } private static Hashtable<String, SimpleDateFormat> parsers = new Hashtable(); public static String format(long stime, String format) { if (format.equals("yyyyMMdd")) return helper.yyyymmdd(stime); SimpleDateFormat sdf = parsers.get(format); if (sdf == null) { sdf = new SimpleDateFormat(format); parsers.put(format, sdf); } synchronized (sdf) { return sdf.format(new Date(stime)); } } public static String format(long stime, String format, Locale locale) { if (format.equals("yyyyMMdd")) return helper.yyyymmdd(stime); SimpleDateFormat sdf = parsers.get(format + locale.getCountry()); if (sdf == null) { sdf = new SimpleDateFormat(format, locale); parsers.put(format + locale.getCountry(), sdf); } synchronized (sdf) { return sdf.format(new Date(stime)); } } public static long parse(String date, String format) { if (format.equals("yyyyMMdd")) return helper.yyyymmdd(date); SimpleDateFormat sdf = parsers.get(format); if (sdf == null) { sdf = new SimpleDateFormat(format); parsers.put(format, sdf); } synchronized (sdf) { try { return sdf.parse(date).getTime(); } catch (ParseException e) { return helper.getBaseTime(); } } } public static boolean isSameDay(Date date, Date date2) { return helper.getDateUnit(date.getTime()) == helper.getDateUnit(date2.getTime()); } public static boolean isToday(long time) { return helper.getDateUnit(time) == helper.getDateUnit(System.currentTimeMillis()); } public static int getHour(Date date) { return helper.getHour(date.getTime()); } public static int getMin(Date date) { return helper.getMM(date.getTime()); } public static int getHour(long time) { return helper.getHour(time); } public static int getMin(long time) { return helper.getMM(time); } public static String timestamp() { return helper.timestamp(System.currentTimeMillis()); } public static String timestampFileName() { return helper.timestampFileName(System.currentTimeMillis()); } public static int getDateMillis(long time) { return helper.getDateMillis(time); } public static long getTimeUnit(long time) { return helper.getTimeUnit(time); } public static long getHourUnit(long time) { return helper.getHourUnit(time); } public static long getTenMinUnit(long time) { return helper.getTenMinUnit(time); } public static long getMinUnit(long time) { return helper.getMinUnit(time); } public static long reverseHourUnit(long unit) { return helper.reverseHourUnit(unit); } public static long now() { return System.currentTimeMillis(); } public static void main(String[] args) throws ParseException { String date; long time; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss.S"); long cpu = SysJMX.getCurrentThreadCPUnano(); for (int i = 0; i < 10000; i++) { date = sdf.format(new Date(System.currentTimeMillis() + i)); } cpu = SysJMX.getCurrentThreadCPUnano() - cpu; System.out.println("SimpleDateFormat.format " + cpu / 1000000L + " ms"); cpu = SysJMX.getCurrentThreadCPUnano(); for (int i = 0; i < 10000; i++) { date = DateUtil.timestamp(System.currentTimeMillis() + i); } cpu = SysJMX.getCurrentThreadCPUnano() - cpu; System.out.println("DateUtil.format " + cpu / 1000000L + " ms"); sdf = new SimpleDateFormat("yyyyMMdd"); cpu = SysJMX.getCurrentThreadCPUnano(); for (int i = 0; i < 10000; i++) { time = sdf.parse("20101123").getTime(); } cpu = SysJMX.getCurrentThreadCPUnano() - cpu; System.out.println("SimpleDateFormat.parse " + cpu / 1000000L + " ms"); cpu = SysJMX.getCurrentThreadCPUnano(); for (int i = 0; i < 10000; i++) { time = DateUtil.yyyymmdd("20101123"); } cpu = SysJMX.getCurrentThreadCPUnano() - cpu; System.out.println("DateUtil.parse " + cpu / 1000000L + " ms"); } }