Class Formatter

java.lang.Object
org.aoju.bus.core.date.Formatter
Direct Known Subclasses:
Converter

public class Formatter extends Object
日期格式化和解析 yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm:ss yyyy-MM-dd HH:mm:ss.SSS yyyy-MM-dd HH:mm:ss.SSSSSS yyyy-MM-dd HH:mm:ss.SSSSSSSSS yyyy-MM-dd'T'HH:mm:ss.SSSZ等等,支持毫秒、微秒和纳秒等精确时间
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • Formatter

      public Formatter()
  • Method Details

    • format

      public static String format(Date date)
      按照给定的通配模式 YYYY-MM-DD HH:MM:SS ,将时间格式化成相应的字符串
      Parameters:
      date - 待格式化的时间
      Returns:
      格式化成功返回成功后的字符串, 失败返回null
    • format

      public static String format(Date date, String format)
      根据特定格式格式化日期
      Parameters:
      date - 被格式化的日期
      format - 日期格式,常用格式见: Fields
      Returns:
      格式化后的字符串
    • format

      public static String format(Date date, DatePrinter format)
      根据特定格式格式化日期
      Parameters:
      date - 被格式化的日期
      format - DatePrinterFormatBuilder
      Returns:
      格式化后的字符串
    • format

      public static String format(Date date, DateFormat format)
      根据特定格式格式化日期
      Parameters:
      date - 被格式化的日期
      format - SimpleDateFormat
      Returns:
      格式化后的字符串
    • format

      public static String format(Date date, DateTimeFormatter format)
      根据特定格式格式化日期
      Parameters:
      date - 被格式化的日期
      format - SimpleDateFormat Fields.NORM_DATETIME_FORMAT
      Returns:
      格式化后的字符串
    • format

      public static String format(Date date, String format, String timeZone)
      根据特定格式格式化日期
      Parameters:
      date - 被格式化的日期
      format - 日期格式,常用格式见: Fields
      timeZone - 时区
      Returns:
      格式化后的字符串
    • format

      public static String format(String srcDate, String srcPattern, String destPattern)
      按照给定的通配模式,格式化成相应的时间字符串
      Parameters:
      srcDate - 原始时间字符串
      srcPattern - 原始时间通配符
      destPattern - 格式化成的时间通配符
      Returns:
      格式化成功返回成功后的字符串, 失败返回""
    • format

      public static long format(String date)
      将指定的日期转换成Unix时间戳
      Parameters:
      date - 需要转换的日期 yyyy-MM-dd HH:mm:ss
      Returns:
      long 时间戳
    • format

      public static String format(long timestamp)
      将Unix时间戳转换成日期
      Parameters:
      timestamp - 时间戳
      Returns:
      String 日期字符串
    • format

      public static String format(long timestamp, String format)
      将Unix时间戳转换成日期
      Parameters:
      timestamp - 时间戳
      format - 格式
      Returns:
      String 日期字符串
    • format

      public static long format(String date, String format)
      将指定的日期转换成Unix时间戳
      Parameters:
      date - 需要转换的日期
      format - 格式
      Returns:
      long 时间戳
    • format

      public static String format(LocalDateTime localDateTime)
      格式化日期时间 格式 yyyy-MM-dd HH:mm:ss
      Parameters:
      localDateTime - 被格式化的日期
      Returns:
      格式化后的字符串
    • format

      public static String format(LocalDateTime localDateTime, String format)
      根据特定格式格式化日期
      Parameters:
      localDateTime - 被格式化的日期
      format - 日期格式,常用格式见: Fields
      Returns:
      格式化后的字符串
    • format

      public static String format(TemporalAccessor time, DateTimeFormatter formatter)
      格式化日期时间为指定格式 如果为Month,调用Enum.toString()
      Parameters:
      time - TemporalAccessor
      formatter - 日期格式化器,预定义的格式见:DateTimeFormatter
      Returns:
      格式化后的字符串
    • format

      public static String format(TemporalAccessor time, String format)
      格式化日期时间为指定格式 如果为Month,调用Enum.toString()
      Parameters:
      time - TemporalAccessor
      format - 日期格式
      Returns:
      格式化后的字符串
    • format

      public static String format(Date date, boolean isUppercase, boolean withTime)
      格式化为中文日期格式,如果isUppercase为false 则返回:2018年10月24日,否则,返回二〇一八年十月二十四日
      Parameters:
      date - 被格式化的日期
      isUppercase - 是否采用大写形式
      withTime - 是否包含时间部分
      Returns:
      中文日期字符串
    • format

      public static String format(Calendar calendar, boolean withTime)
      将指定Calendar时间格式化为纯中文形式
           2018-02-24 12:13:14 转换为 二〇一八年二月二十四日(withTime为false)
           2018-02-24 12:13:14 转换为 二〇一八年二月二十四日一十二时一十三分一十四秒(withTime为true)
       
      Parameters:
      calendar - Calendar
      withTime - 是否包含时间部分
      Returns:
      格式化后的字符串
    • formatDate

      public static String formatDate(Date date)
      格式化日期部分(不包括时间) 格式 yyyy-MM-dd
      Parameters:
      date - 被格式化的日期
      Returns:
      格式化后的字符串
    • formatDate

      public static String formatDate(Date date, boolean isHttp)
      格式化日期部分(不包括时间) 格式 yyyy-MM-dd
      Parameters:
      date - 被格式化的日期
      isHttp - 是否http格式
      Returns:
      格式化后的字符串
    • formatTime

      public static String formatTime(Date date)
      格式化时间 格式 HH:mm:ss
      Parameters:
      date - 被格式化的日期
      Returns:
      格式化后的字符串
    • formatBetween

      public static String formatBetween(Date beginDate, Date endDate, Fields.Units units)
      格式化日期间隔输出
      Parameters:
      beginDate - 起始日期
      endDate - 结束日期
      units - 级别,按照天、小时、分、秒、毫秒分为5个等级
      Returns:
      XX天XX小时XX分XX秒
    • formatBetween

      public static String formatBetween(Date beginDate, Date endDate)
      格式化日期间隔输出,精确到毫秒
      Parameters:
      beginDate - 起始日期
      endDate - 结束日期
      Returns:
      XX天XX小时XX分XX秒
    • formatBetween

      public static String formatBetween(long betweenMs, Fields.Units units)
      格式化日期间隔输出
      Parameters:
      betweenMs - 日期间隔
      units - 级别,按照天、小时、分、秒、毫秒分为5个等级
      Returns:
      XX天XX小时XX分XX秒XX毫秒
    • formatBetween

      public static String formatBetween(long betweenMs)
      格式化日期间隔输出,精确到毫秒
      Parameters:
      betweenMs - 日期间隔
      Returns:
      XX天XX小时XX分XX秒XX毫秒
    • parse

      public static String parse(Calendar calendar, boolean withTime)
      将指定Calendar时间格式化为纯中文形式
           2018-02-24 12:13:14 转换为 二〇一八年二月二十四日(withTime为false)
           2018-02-24 12:13:14 转换为 二〇一八年二月二十四日一十二时一十三分一十四秒(withTime为true)
       
      Parameters:
      calendar - Calendar
      withTime - 是否包含时间部分
      Returns:
      格式化后的字符串
    • parse

      public static DateTime parse(CharSequence text)
      将日期字符串转换为DateTime对象,格式:
      1. yyyy-MM-dd HH:mm:ss
      2. yyyy/MM/dd HH:mm:ss
      3. yyyy.MM.dd HH:mm:ss
      4. yyyy年MM月dd日 HH时mm分ss秒
      5. yyyy-MM-dd
      6. yyyy/MM/dd
      7. yyyy.MM.dd
      8. HH:mm:ss
      9. HH时mm分ss秒
      10. yyyy-MM-dd HH:mm
      11. yyyy-MM-dd HH:mm:ss.SSS
      12. yyyy-MM-dd HH:mm:ss.SSSSSS
      13. yyyyMMddHHmmss
      14. yyyyMMddHHmmssSSS
      15. yyyyMMdd
      16. EEE, dd MMM yyyy HH:mm:ss z
      17. EEE MMM dd HH:mm:ss zzz yyyy
      18. yyyy-MM-dd'T'HH:mm:ss'Z'
      19. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
      20. yyyy-MM-dd'T'HH:mm:ssZ
      21. yyyy-MM-dd'T'HH:mm:ss.SSSZ
      Parameters:
      text - 日期字符串
      Returns:
      日期
    • parse

      public static LocalDateTime parse(CharSequence text, String pattern)
      构建LocalDateTime对象
      Parameters:
      text - 时间字符串(带格式)
      pattern - 使用Fields定义的格式
      Returns:
      LocalDateTime对象
    • parse

      public static DateTime parse(String text, DateFormat format)
      构建DateTime对象
      Parameters:
      text - Date字符串
      format - 格式化器 SimpleDateFormat
      Returns:
      DateTime对象
    • parse

      public static DateTime parse(String text, DateParser parser)
      构建DateTime对象
      Parameters:
      text - Date字符串
      parser - 格式化器,FormatBuilder
      Returns:
      DateTime对象
    • parse

      public static DateTime parse(String text, String pattern)
      将特定格式的日期转换为Date对象
      Parameters:
      text - 特定格式的日期
      pattern - 格式,例如yyyy-MM-dd
      Returns:
      日期对象
    • parse

      public static Calendar parse(String text, String... format)
      通过给定的日期格式解析日期时间字符串 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象
      Parameters:
      text - 日期时间字符串,非空
      format - 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
      Returns:
      解析后的 Calendar
    • parse

      public static Calendar parse(String text, Locale locale, String... pattern)
      通过给定的日期格式解析日期时间字符串 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象
      Parameters:
      text - 日期时间字符串,非空
      locale - 地区,当为null时使用Locale.getDefault()
      pattern - 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
      Returns:
      解析后的 Calendar
    • parse

      public static DateTime parse(CharSequence text, DateParser parser, boolean lenient)
      构建DateTime对象
      Parameters:
      text - Date字符串
      parser - 格式化器,DateParser
      lenient - 是否宽容模式
      Returns:
      DateTime对象
    • parse

      public static Calendar parse(String text, Locale locale, boolean lenient, String... pattern)
      通过给定的日期格式解析日期时间字符串 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象
      Parameters:
      text - 日期时间字符串,非空
      locale - 地区,当为null时使用Locale.getDefault()
      lenient - 日期时间解析是否使用严格模式
      pattern - 需要尝试的日期时间格式数组,非空
      Returns:
      解析后的 Calendar
      See Also:
    • parseDate

      public static DateTime parseDate(String text)
      解析日期字符串,忽略时分秒,支持的格式包括:
       yyyy-MM-dd
       yyyy/MM/dd
       yyyy.MM.dd
       yyyy年MM月dd日
       
      Parameters:
      text - 标准形式的日期字符串
      Returns:
      日期对象
    • parseTime

      public static DateTime parseTime(String text)
      解析时间,格式HH:mm:ss,默认为1970-01-01
      Parameters:
      text - 标准形式的日期字符串
      Returns:
      日期对象
    • parseDateTime

      public static DateTime parseDateTime(String text)
      解析日期时间字符串,格式支持:
       yyyy-MM-dd HH:mm:ss
       yyyy/MM/dd HH:mm:ss
       yyyy.MM.dd HH:mm:ss
       yyyy年MM月dd日 HH:mm:ss
       
      Parameters:
      text - 标准形式的时间字符串
      Returns:
      日期对象
    • parseTimeToday

      public static DateTime parseTimeToday(String text)
      解析时间,格式HH:mm:ss,日期默认为今天
      Parameters:
      text - 标准形式的日期字符串
      Returns:
      日期对象
    • parse

      public static Calendar parse(CharSequence text, boolean lenient, DateParser parser)
      使用指定DateParser解析字符串为Calendar
      Parameters:
      text - 日期字符串
      lenient - 是否宽容模式
      parser - DateParser
      Returns:
      解析后的 Calendar,解析失败返回null
    • parseCST

      public static DateTime parseCST(CharSequence text)
      解析CST时间,格式:
      1. EEE MMM dd HH:mm:ss z yyyy(例如:Wed Aug 01 00:00:00 CST 2020)
      Parameters:
      text - UTC时间
      Returns:
      日期对象
    • parseUTC

      public static DateTime parseUTC(String text)
      解析UTC时间,格式:
      1. yyyy-MM-dd'T'HH:mm:ss'Z'
      2. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
      3. yyyy-MM-dd'T'HH:mm:ssZ
      4. yyyy-MM-dd'T'HH:mm:ss.SSSZ
      5. yyyy-MM-dd'T'HH:mm:ss+0800
      6. yyyy-MM-dd'T'HH:mm:ss+08:00
      Parameters:
      text - UTC时间
      Returns:
      日期对象
    • parseByPatterns

      public static Calendar parseByPatterns(String text, String... pattern)
      通过给定的日期格式解析日期时间字符串 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象
      Parameters:
      text - 日期时间字符串,非空
      pattern - 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
      Returns:
      解析后的 Calendar
    • parseByPatterns

      public static Calendar parseByPatterns(String text, Locale locale, String... pattern)
      通过给定的日期格式解析日期时间字符串 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象
      Parameters:
      text - 日期时间字符串,非空
      locale - 地区,当为null时使用Locale.getDefault()
      pattern - 需要尝试的日期时间格式数组,非空, 见SimpleDateFormat
      Returns:
      解析后的 Calendar
    • parseByPatterns

      public static Calendar parseByPatterns(String text, Locale locale, boolean lenient, String... pattern)
      通过给定的日期格式解析日期时间字符串 传入的日期格式会逐个尝试,直到解析成功,返回Calendar对象
      Parameters:
      text - 日期时间字符串,非空
      locale - 地区,当为null时使用Locale.getDefault()
      lenient - 日期时间解析是否使用严格模式
      pattern - 需要尝试的日期时间格式数组,非空
      Returns:
      解析后的 Calendar
      See Also:
    • newSimpleFormat

      public static SimpleDateFormat newSimpleFormat(String pattern)
      创建SimpleDateFormat,注意此对象非线程安全 此对象默认为严格格式模式,即parse时如果格式不正确会报错
      Parameters:
      pattern - 表达式
      Returns:
      SimpleDateFormat
    • newSimpleFormat

      public static SimpleDateFormat newSimpleFormat(String pattern, Locale locale, TimeZone timeZone)
      创建SimpleDateFormat,注意此对象非线程安全 此对象默认为严格格式模式,即parse时如果格式不正确会报错
      Parameters:
      pattern - 表达式
      locale - Localenull表示默认
      timeZone - TimeZonenull表示默认
      Returns:
      SimpleDateFormat
    • getShotName

      public static String getShotName(TimeUnit unit)
      获取时长单位简写
      Parameters:
      unit - 单位
      Returns:
      单位简写名称
    • isOverlap

      public static boolean isOverlap(Date realStartTime, Date realEndTime, Date startTime, Date endTime)
      检查两个时间段是否有时间重叠 重叠指两个时间段是否有交集
      1. x > b || a > y 无交集
      2. 则有交集的逻辑为 !(x > b || a > y) 根据德摩根公式,可化简为 x <= b && a <= y
      Parameters:
      realStartTime - 第一个时间段的开始时间
      realEndTime - 第一个时间段的结束时间
      startTime - 第二个时间段的开始时间
      endTime - 第二个时间段的结束时间
      Returns:
      true 表示时间有重合