You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中JDE儒略日期转公历日期的正确实现方案

JDE企业版儒略日期转公历日期(PySpark实现)

JDE企业版的儒略日期是6位数字格式,结构规则为:

  • 前3位:相对于1900年的年份偏移量(如123对应1900+123=2023年,000对应1900年)
  • 后3位:对应年份内的第几天(如002对应当年第2天,即1月2日)

你之前的代码错误地将其当作yyMMdd格式解析,这是导致转换失败的核心原因。以下是正确的转换实现:

完整代码实现

from pyspark.sql import functions as F
from pyspark.sql.types import StringType

# 若ILDGL是数字类型,先转换为字符串(字符串类型可跳过此步骤)
df = df.withColumn("ILDGL_str", F.col("ILDGL").cast(StringType()))

# 计算转换后的公历日期
df = df.withColumn(
    "ILDGL_Normal",
    F.date_add(
        # 生成目标年份的1月1日作为基准日期
        F.make_date(
            F.substring(F.col("ILDGL_str"), 1, 3).cast("int") + 1900,
            1,
            1
        ),
        # 年内天数减1:因为1月1日是当年第1天,无需偏移
        F.substring(F.col("ILDGL_str"), 4, 3).cast("int") - 1
    )
)

# 可选:删除中间临时列
df = df.drop("ILDGL_str")

逻辑验证

针对你给出的测试用例:

  • 输入123002:年份偏移123→1900+123=2023,年内天数002→2-1=1,date_add(2023-01-01, 1)得到2023-01-02,符合预期
  • 输入000001:年份偏移0→1900,年内天数001→1-1=0,date_add(1900-01-01, 0)得到1900-01-01,符合预期

该实现会自动处理闰年等边界场景(如2020年的第366天120366会正确转换为2020-12-31)。

内容的提问来源于stack exchange,提问作者Arpan Ghimire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:25:53