package org.araqne.logstorage; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.TimeZone; public class LogUtil { public static void main(String[] args) throws ParseException { long currentTimeMillis = System.currentTimeMillis(); System.out.println(getDay(new Date())); for (int i = 0; i < 10000000; ++i) { @SuppressWarnings("unused") Date day = getDay(new Date()); } System.out.println(System.currentTimeMillis() - currentTimeMillis); System.out.println(getDay(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("1987-05-26 03:00:00"))); currentTimeMillis = System.currentTimeMillis(); for (int i = 0; i < 10000000; ++i) { @SuppressWarnings("unused") Date day = getDay2(new Date()); } System.out.println(System.currentTimeMillis() - currentTimeMillis); System.out.println(getDay2(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("1987-05-26 03:00:00"))); } private static ThreadLocal<TimeZone> timeZoneCache = new ThreadLocal<TimeZone>() { @Override protected TimeZone initialValue() { return TimeZone.getDefault(); } }; public static Date getDay(Date date) { long time = date.getTime(); TimeZone timeZone = timeZoneCache.get(); if (timeZone.inDaylightTime(date)) return new Date(time - ((time + timeZone.getRawOffset() + 3600000) % 86400000L)); else return new Date(time - ((time + timeZone.getRawOffset()) % 86400000L)); } private static int timezoneOffset = Calendar.getInstance().getTimeZone().getRawOffset(); @Deprecated public static Date getDay2(Date date) { long time = date.getTime(); return new Date(time - ((time + timezoneOffset) % 86400000L)); } public static Map<String, Object> newLogData(String ... strings) { if (strings.length % 2 != 0) throw new IllegalArgumentException("number of strings argument should be even"); HashMap<String, Object> result = new HashMap<String, Object>(); for (int i = 0; i < strings.length; i += 2) { String key = strings[i]; String value = strings[i+1]; result.put(key, value); } return result; } }