Scala DateTime工具类

SimpleDateFormat 线程不安全,使用 joda-time 实现的DateTime工具类

import java.util.Date

import org.joda.time.{DateTime, Instant}
import org.joda.time.format.{DateTimeFormat, DateTimeFormatter}

/**
  * 日期时间工具类
  *
  * Joda实现
  * create by L 2020/7/12
  */
object DateUtil {
  val DATE_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd")
  val TIME_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
  val DATE_KEY_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyyMMdd")
  val TIME_MINUTE_FORMAT: DateTimeFormatter = DateTimeFormat.forPattern("yyyyMMddHHmm")


  /**
    * 获取昨天的, 格式: yyyy-MM-dd
    *
    * @return 昨天的日期
    */
  def getYesterdayDate: String = {
    DateTime.now() .minusDays(1).toString(DATE_FORMAT)
  }

  /**
    * 获取当天日期, 格式: yyyy-MM-dd
    *
    * @return 当天日期
    */
  def getTodayDate: String = {
    DateTime.now().toString(DATE_FORMAT)
  }

  /**
    * 获取距当天 N 天时的日期 格式: yyyy-MM-dd
    *
    * @param n : 当天为 0,前一天为 1, 后一天为 -1
    * @return yyyy-MM-dd
    */
  def getDate(n: Int): String = {
    DateTime.now().minusDays(n).toString(DATE_FORMAT)
  }

  /**
    * 获取日期时间 格式: yyyy-MM-dd
    *
    * @param yesterday : 需要计算的日期
    * @param n : 当天为 0,前一天为 1, 后一天为 -1
    * @return yyyy-MM-dd
    */
  def getOneDate(yesterday: String, n: Int): String = {
    DateTime.parse(yesterday).minusDays(n).toString(DATE_FORMAT)
  }

  def getNowTime: String = {
    DateTime.now().toString(TIME_FORMAT)
  }

  /**
    * 格式化日期, 格式: yyyy-MM-dd
    *
    * @param date Date对象
    * @return 格式化后的日期
    */
  def formatDate(date: Date): String = {
    new DateTime(date).toString(DATE_FORMAT)
  }

  /**
    * 格式化时间, 格式: yyyy-MM-dd HH:mm:ss
    *
    * @param date Date对象
    * @return 格式化后的时间
    */
  def formatTime(date: Date): String = {
    new DateTime(date).toString(TIME_FORMAT)
  }

  /**
    * 格式化日期key, 格式: yyyyMMdd
    *
    * @param date : Date对象, Sat Sep 07 03:02:01 CST 2019
    * @return yyyyMMdd
    */
  def formatDateKey(date: Date): String = {
    new DateTime(date).toString(DATE_KEY_FORMAT)
  }

  /**
    * 格式化日期key, 格式: yyyyMMdd
    *
    * @param date : time String, yyyy-MM-dd HH:mm:ss
    * @return yyyyMMdd
    */
  def formatDateKey(date: String): Date = {
    DATE_KEY_FORMAT.parseDateTime(date).toDate
  }

  /**
    * 格式化日期key, 格式: yyyyMMdd
    *
    * @param date : time String, yyyy-MM-dd HH:mm:ss
    * @return yyyyMMdd
    */
  def dateToTimestamp(date: String): Long = {
    TIME_FORMAT.parseDateTime(date).getMillis
  }

  /**
    * 格式化日期为0点, 格式: yyyy-MM-dd 00:00:00
    *
    * @param date : time String, yyyy-MM-dd HH:mm:ss
    * @return yyyy-MM-dd 00:00:00
    */
  def formatTimeZone(date: String): String = {
    TIME_FORMAT.parseDateTime(date).toString("yyyy-MM-dd 00:00:00")
  }

  /**
    * 时间戳转日期, 格式: yyyy-MM-dd
    *
    * @param timestamp : 时间戳, Long
    * @return yyyy-MM-dd
    */
  def timestampToDate(timestamp: Long): String = {
    new DateTime(timestamp).toString(DATE_FORMAT)
  }

  /**
    * 时间戳转time, 格式: yyyy-MM-dd HH:mm:ss
    *
    * @param timestamp : 时间戳, Long, 13 位
    * @return yyyy-MM-dd HH:mm:ss
    */
  def timestampToTime(timestamp: Long): String = {
    new DateTime(timestamp).toString(TIME_FORMAT)
  }

  /**
    * 时间戳转指定格式time, 格式: 自定义
    *
    * @param timestamp: 时间戳, Long, 13 位
    * @param pattern: 格式化格式,如: yyyy-MM-dd
    * @return 自定义
    */
  def timestampToTime(timestamp: Long, pattern: String): String = {
    new DateTime(timestamp).toString(pattern)
  }

  /**
    * 通过时间戳获取小时, 格式: HH
    *
    * @param timestamp: 时间戳, Long, 13 位
    * @return 小时, Int
    */
  def getHour(timestamp: Long): Int = {
    new DateTime(timestamp).hourOfDay().getAsString.toInt
  }

  /**
    * 通过时间戳获取分钟, 格式: mm
    *
    * @param timestamp: 时间戳, Long, 13 位
    * @return 分钟, Int
    */
  def getMinute(timestamp: Long): Int = {
    new DateTime(timestamp).millisOfSecond().getAsString.toInt
  }

  /**
    * 通过时间戳获取秒, 格式: ss
    *
    * @param timestamp: 时间戳, Long, 13 位
    * @return 秒, Int
    */
  def getSecond(timestamp: Long): Int = {
    new DateTime(timestamp).secondOfMinute().getAsString.toInt
  }

  /**
    * 将时间转换为日期格式,格式化到月
    *
    * @param date yyyy-MM-dd HH:mm:ss
    * @return yyyy-MM
    */
  def formatDateToMonth(date: String): String = {
    TIME_FORMAT.parseDateTime(date).toString("yyyy-MM")
  }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

訾零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值