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

使用tsibble的yearmonth输入日期为何返回上月结果?

问题:tsibble包中yearmonth()处理日期字符串返回上月结果,与make_yearmonth()结果不一致

我在使用tsibble包创建“2016 Jan”的yearmonth对象时,发现输入日期字符串后返回的是上月结果,示例如下:

> yearmonth("2016 Jan")
<yearmonth[1]>
[1] "2015 Dec"
> yearmonth("2016 Feb")
<yearmonth[1]>
[1] "2016 Jan"

但使用make_yearmonth函数却能得到预期结果,且用yearmonth验证也正常:

> ym <- make_yearmonth(year=2016, month=1)
> ym
<yearmonth[1]>
[1] "2016 Jan"
> yearmonth(ym)
<yearmonth[1]>
[1] "2016 Jan"

想请教为何直接输入日期字符串调用yearmonth与使用make_yearmonth的结果不同?


解答

这个差异的核心原因在于yearmonth()处理字符串时的底层解析逻辑:

  • yearmonth()对字符串的解析依赖基础日期转换:
    当传入"2016 Jan"这类字符串时,yearmonth()会先将其转换为该月的第一天(即2016-01-01),再转换为yearmonth类型。如果你的系统时区是UTC以西的时区(比如美洲时区),2016-01-01在UTC时区下实际是2015-12-31,yearmonth()基于UTC日期值生成结果,最终显示为2015 Dec。

  • make_yearmonth()直接构造yearmonth对象:
    make_yearmonth()通过传入的year和month参数直接构建yearmonth对象,跳过了字符串转具体日期的步骤,不会触发时区导致的日期偏移,因此能得到预期的2016 Jan。

  • 验证时区影响的方法:
    显式指定UTC时区解析字符串,即可得到正确结果:

    yearmonth("2016 Jan", tz = "UTC")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:25:19