All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blade.kit.DateKit Maven / Gradle / Ivy

/**
 * Copyright (c) 2017, biezhi 王爵 ([email protected])
 * 

* 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 com.blade.kit; import com.blade.mvc.Const; import lombok.experimental.UtilityClass; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** * Date kit * * @author biezhi * 2017/6/2 */ @UtilityClass public class DateKit { /** * GMT Format */ public static final DateTimeFormatter GMT_FMT = DateTimeFormatter.ofPattern(Const.HTTP_DATE_FORMAT, Locale.US); /** * GMT ZoneId */ public static final ZoneId GMT_ZONE_ID = ZoneId.of("GMT"); /** * get current unix time * * @return return current unix time */ public static int nowUnix() { return (int) Instant.now().getEpochSecond(); } /** * format unix time to string * * @param unixTime unix time * @param pattern date format pattern * @return return string date */ public static String toString(long unixTime, String pattern) { return Instant.ofEpochSecond(unixTime).atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(pattern)); } /** * format date to string * * @param date date instance * @param pattern date format pattern * @return return string date */ public static String toString(Date date, String pattern) { Instant instant = new java.util.Date((date.getTime())).toInstant(); return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(pattern)); } public static String toString(LocalDate date, String pattern) { return date.format(DateTimeFormatter.ofPattern(pattern)); } public static String toString(LocalDateTime date, String pattern) { return date.format(DateTimeFormatter.ofPattern(pattern)); } public static String toString(LocalDateTime time) { return toString(time, "yyyy-MM-dd HH:mm:ss"); } /** * format string time to unix time * * @param time string date * @param pattern date format pattern * @return return unix time */ public static int toUnix(String time, String pattern) { LocalDateTime formatted = LocalDateTime.parse(time, DateTimeFormatter.ofPattern(pattern)); return (int) formatted.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond(); } /** * format string (yyyy-MM-dd HH:mm:ss) to unix time * * @param time string datetime * @return return unix time */ public static int toUnix(String time) { return toUnix(time, "yyyy-MM-dd HH:mm:ss"); } public static int toUnix(Date date) { return (int) date.toInstant().getEpochSecond(); } public static Date toDate(String time, String pattern) { LocalDate formatted = LocalDate.parse(time, DateTimeFormatter.ofPattern(pattern)); return Date.from(Instant.from(formatted.atStartOfDay(ZoneId.systemDefault()))); } public static Date toDateTime(String time, String pattern) { LocalDateTime formatted = LocalDateTime.parse(time, DateTimeFormatter.ofPattern(pattern)); return Date.from(formatted.atZone(ZoneId.systemDefault()).toInstant()); } public static LocalDate toLocalDate(String time, String pattern) { return LocalDate.parse(time, DateTimeFormatter.ofPattern(pattern)); } public static LocalDateTime toLocalDateTime(String time, String pattern) { return LocalDateTime.parse(time, DateTimeFormatter.ofPattern(pattern)); } public static Date toDate(long unixTime) { return Date.from(Instant.ofEpochSecond(unixTime)); } public static String gmtDate() { return GMT_FMT.format(LocalDateTime.now().atZone(GMT_ZONE_ID)); } public static String gmtDate(LocalDateTime localDateTime) { return GMT_FMT.format(localDateTime.atZone(GMT_ZONE_ID)); } public static String gmtDate(Date date) { return GMT_FMT.format(LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).atZone(GMT_ZONE_ID)); } private static final Map PRETTY_TIME_I18N = new HashMap<>(); static { PRETTY_TIME_I18N.put("zh_YEARS", "年前"); PRETTY_TIME_I18N.put("zh_MONTHS", "个月前"); PRETTY_TIME_I18N.put("zh_WEEKS", "周前"); PRETTY_TIME_I18N.put("zh_DAYS", "天前"); PRETTY_TIME_I18N.put("zh_HOURS", "小时前"); PRETTY_TIME_I18N.put("zh_MINUTES", "分钟前"); PRETTY_TIME_I18N.put("zh_SECONDS", "秒前"); PRETTY_TIME_I18N.put("zh_JUST_NOW", "刚刚"); PRETTY_TIME_I18N.put("zh_YESTERDAY", "昨天"); PRETTY_TIME_I18N.put("zh_LAST_WEEK", "上周"); PRETTY_TIME_I18N.put("zh_LAST_MONTH", "上个月"); PRETTY_TIME_I18N.put("zh_LAST_YEAR", "去年"); PRETTY_TIME_I18N.put("us_YEARS", "years ago"); PRETTY_TIME_I18N.put("us_MONTHS", "months ago"); PRETTY_TIME_I18N.put("us_DAYS", "days ago"); PRETTY_TIME_I18N.put("us_HOURS", "hours ago"); PRETTY_TIME_I18N.put("us_MINUTES", "minutes ago"); PRETTY_TIME_I18N.put("us_SECONDS", "seconds ago"); PRETTY_TIME_I18N.put("us_JUST_NOW", "Just now"); PRETTY_TIME_I18N.put("us_YESTERDAY", "Yesterday"); PRETTY_TIME_I18N.put("us_LAST_WEEK", "Last week"); PRETTY_TIME_I18N.put("us_LAST_MONTH", "Last month"); PRETTY_TIME_I18N.put("us_LAST_YEAR", "Last year"); } public static String prettyTime(LocalDateTime date, Locale locale) { if (date == null) { return null; } String keyPrefix = locale.getLanguage().equals("zh") ? "zh" : "us"; long diff = Duration.between(date, LocalDateTime.now()).toMillis() / 1000; int amount; /** * Second counts * 3600: hour * 86400: day * 604800: week * 2592000: month * 31536000: year */ if (diff >= 31536000) { amount = (int) (diff / 31536000); if (amount == 1) { return PRETTY_TIME_I18N.get(keyPrefix + "_LAST_YEAR"); } return amount + PRETTY_TIME_I18N.get(keyPrefix + "_YEARS"); } else if (diff >= 2592000) { amount = (int) (diff / 2592000); if (amount == 1) { return PRETTY_TIME_I18N.get(keyPrefix + "_LAST_MONTH"); } return amount + PRETTY_TIME_I18N.get(keyPrefix + "_MONTHS"); } else if (diff >= 604800) { amount = (int) (diff / 604800); if (amount == 1) { return PRETTY_TIME_I18N.get(keyPrefix + "_LAST_WEEK"); } return amount + PRETTY_TIME_I18N.get(keyPrefix + "_WEEKS"); } else if (diff >= 86400) { amount = (int) (diff / 86400); if (amount == 1) { return PRETTY_TIME_I18N.get(keyPrefix + "_YESTERDAY"); } return amount + PRETTY_TIME_I18N.get(keyPrefix + "_DAYS"); } else if (diff >= 3600) { amount = (int) (diff / 3600); return amount + PRETTY_TIME_I18N.get(keyPrefix + "_HOURS"); } else if (diff >= 60) { amount = (int) (diff / 60); return amount + PRETTY_TIME_I18N.get(keyPrefix + "_MINUTES"); } else { amount = (int) diff; if (amount < 6) { return PRETTY_TIME_I18N.get(keyPrefix + "_JUST_NOW"); } else { return amount + PRETTY_TIME_I18N.get(keyPrefix + "_SECONDS"); } } } public static String prettyTime(LocalDateTime date) { return prettyTime(date, Locale.getDefault()); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy