mm-dd”和“yyyy-mm-dd”日期格式之间的差异

yqkkidmi  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(497)

这个问题在这里已经有答案了

y返回2012,y返回2011,格式为simpledateformat(5个答案)
11个月前关门了。
我有一个用例向timestamp列添加一些值,并从中派生一个日期。我正在尝试使用from\ unix和unix\ timestamp函数。但它用不同的格式显示不同的值。

select from_unixtime('1577582583',  'YYYY-MM-dd'), from_unixtime('1577582583',  'yyyy-MM-dd');
from_unixtime(CAST(1577582583 AS BIGINT), YYYY-MM-dd)   from_unixtime(CAST(1577582583 AS BIGINT), yyyy-MM-dd)
2020-12-29  2019-12-29

有人能分辨出“yyyy-mm-dd”格式和“yyyy-mm-dd”格式的区别吗?

vjrehmav

vjrehmav1#

YYYY 是一周的约会 yyyy 是个普通的日子。您可以在那里查看:https://docs.oracle.com/javase/7/docs/api/java/text/simpledateformat.htmlhttpshttp://en.wikipedia.org/wiki/iso\周\日期

mwecs4sa

mwecs4sa2#

在这种情况下没有区别。。。。但是通常的方式是yyyy而不是yyyy看到unixtimestamp的代码了吗
两种格式的值都相同。我认为catalyst会很小心,即使你传递了错误的格式。。。
请参见此示例以演示行为:

package com.examples

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

object UnixTimestamp extends App {

  val spark: SparkSession = SparkSession.builder()
    .master("local")
    .appName("UnixTimestamp")
    .getOrCreate()
  Logger.getLogger("org").setLevel(Level.WARN)

  spark.sparkContext.setLogLevel("ERROR")

  import spark.sqlContext.implicits._

  //Convert unix timestamp to date
  val dateDF = Seq(1).toDF("seq").select(
    from_unixtime(unix_timestamp(), "MM-dd-yyyy").as("date_1"),
    from_unixtime(unix_timestamp(), "dd-MM-yyyy HH:mm:ss").as("date_2"),
    from_unixtime(unix_timestamp(), "yyyy-MM-dd").as("date_3"),
    from_unixtime(unix_timestamp(), "YYYY-MM-dd").as("date_4"),
    from_unixtime(lit(1577582583), "YYYY-MM-dd").as("yourdate1"), // your example date format 1
    from_unixtime(lit(1577582583), "yyyy-MM-dd").as("yourdate2")//// your example date format 2

  )
  dateDF.printSchema()
  dateDF.show(false)
  println("lets consider sql or hive way here of what you have done")
  spark.sql("select from_unixtime('1577582583',  'YYYY-MM-dd'), from_unixtime('1577582583',  'yyyy-MM-dd')").show
}

结果:这里yourdate1(yyyy-mm-dd)和yourdate2(yyy-mm-dd)是两种不同的格式

root
|-- date_1: string (nullable = true)
|-- date_2: string (nullable = true)
|-- date_3: string (nullable = true)
|-- date_4: string (nullable = true)
|-- yourdate1: string (nullable = true)
|-- yourdate2: string (nullable = true)

+----------+-------------------+----------+----------+----------+----------+
|date_1    |date_2             |date_3    |date_4    |yourdate1 |yourdate2 |
+----------+-------------------+----------+----------+----------+----------+
|02-14-2020|14-02-2020 21:19:53|2020-02-14|2020-02-14|2019-12-28|2019-12-28|
+----------+-------------------+----------+----------+----------+----------+

lets consider sql or hive way here of what you have done
+-----------------------------------------------------+-----------------------------------------------------+
|from_unixtime(CAST(1577582583 AS BIGINT), YYYY-MM-dd)|from_unixtime(CAST(1577582583 AS BIGINT), yyyy-MM-dd)|
+-----------------------------------------------------+-----------------------------------------------------+
|                                           2019-12-28|                                           2019-12-28|
+-----------------------------------------------------+-----------------------------------------------------+

相关问题