日期的各种转换 JAVA/Scala

1.先看一些简单的。这里用到的包和类见import。

import java.text.SimpleDateFormat
import java.time.{LocalDate, LocalTime}
import java.util.Date

object TimeAndDate {
  def main(args: Array[String]): Unit = {
    //1-时间戳转日期
    val timeStamp: Long = System.currentTimeMillis()
    val date = new Date(timeStamp)
    println(date.toString)
    // Sun Mar 01 08:40:27 CST 2020、

    //2-时间戳转固定格式的日期
    val format = new SimpleDateFormat("yyyy-MM-dd")
    val dateStr: String = format.format(date)
    println(dateStr)
    //2020-03-01

    //3-字符串转时间戳
    val dateDate: Date = format.parse(dateStr) //获得的是Date类型,获得时间戳还需要getTime
    val dateLong: Long = dateDate.getTime // ->获得的是相应日期凌晨0点的时间戳 13位到毫秒
    println(dateLong)
    //1582992000000

    //4-获取系统当前的日期
    val now: LocalDate = LocalDate.now
    println(now)
    //2020-03-01
    //要获得String 只要toString可以

    //5-获取系统当前的时间
    val time: LocalTime = LocalTime.now()
    println(time)
    //08:47:26.411 可以看到会带有毫秒呢
  }
}

2.再来一些稍微复杂但也较常用的。
比如给你某个时间戳或日期字符串,让你获得这个时间戳所在的周一,月的一号,年的第一天的日期/或这些日期对应的时间戳
再比如一周前,一周后,一天前,一天后这样的需求。

import org.joda.time.DateTime

object TimeAndDate {
  def main(args: Array[String]): Unit = {
//1-给定时间戳给出周月年的日期
    //传入的参数为Int 即第几天

    val time = new DateTime(System.currentTimeMillis())
    val pattern = "yyyy-MM-dd"
    //------------------------获取周一,月的一号,年的第一天的时间戳---------------------------------
    val firstDayOfWeek: String = time.withDayOfWeek(1).toString(pattern)
    val firstDayOfMonth: String = time.withDayOfMonth(1).toString(pattern)
    val firstDayOfYear: String = time.withDayOfYear(1).toString(pattern)
    val secondDayOfWeek: String = time.withDayOfWeek(2).toString(pattern)
    val secondDayOfMonth: String = time.withDayOfMonth(2).toString(pattern)
    val secondDayOfYear: String = time.withDayOfYear(2).toString(pattern)

    val res1: String =
      s"""firstDayOfWeek:$firstDayOfWeek,
         |    firstDayOfMonth:$firstDayOfMonth,
         |    firstDayOfYear:$firstDayOfYear""".stripMargin

    val res2: String =
      s"""secondDayOfWeek:$secondDayOfWeek,
         |    secondDayOfMonth:$secondDayOfMonth,
         |    secondDayOfYear:$secondDayOfYear""".stripMargin

    println(res1)
//    firstDayOfWeek:2020-02-24,
//    firstDayOfMonth:2020-03-01,
//    firstDayOfYear:2020-01-01

    println(res2)

//    secondDayOfWeek:2020-02-25,
//    secondDayOfMonth:2020-03-02,
//    secondDayOfYear:2020-01-02

    //先来看下这几个方法的作用,这几个都是无参的,方法顾名思义,但是返回的是DateTime.Property类型
    //需要.get()返回结果 返回是Int型
    println(s"time.dayOfMonth().get():${time.dayOfMonth().get() }")
    println(s"time.dayOfWeek().get():${time.dayOfWeek().get()}")
    println(s"time.dayOfYear.get(): ${time.dayOfYear().get()}")
    println(s"time.hourOfYear.get():${time.hourOfDay().get()}")
    println(s"time.millisOfDay.get():${time.millisOfDay.get()}")
    println(s"time.millisOfSecond.get():${time.millisOfSecond().get()}")

    //而使用相应的get方法可以直接得到结果

    println(time.getDayOfMonth)//1
    println(time.getDayOfWeek)//7
    println(time.getDayOfYear)//61
    println(time.getHourOfDay)//14
    println(time.getWeekOfWeekyear)//9
    println(time.getWeekyear)//2020

    println(time.minusDays(1).toString(pattern))//2020-02-29 前一天
    println(time.plusDays(1).toString(pattern))//2020-03-02 后一天

    println(time.withTimeAtStartOfDay())//2020-03-01T00:00:00.000+08:00
    println(time.withTimeAtStartOfDay().getMillis)//1582992000000

    //-----------------------获取周一,月的一号,年的第一天的00:00:00 的时间戳-----------------------------
    println(time.withDayOfMonth(1).withTimeAtStartOfDay().getMillis)//1582992000000 ->2020-03-01 00:00:00
    println(time.withDayOfWeek(1).withTimeAtStartOfDay().getMillis)//1582473600000 -> 2020-02-24 00:00:00
    println(time.withDayOfYear(1).withTimeAtStartOfDay().getMillis)//1577808000000 -> 2020-01-01 00:00:00

  }
}

希望有用,如有错误,还望指正,一起学习进步~
Today is a nice day,beautiful sunshine outside,Here comes the spring

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值