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

为什么Adaptive Card的Input.Date控件选中日期后会自动减1天?

问题示意图

问题根因

该问题由Teams客户端和后台的时区转换逻辑不匹配导致:

  • Teams原生客户端在提交Input.Date控件的选中值时,会自动将用户选择的本地日期转换为UTC时区的0点时间戳传回后台
  • 如果你所处的时区为UTC+X(例如中国标准时间为UTC+8),UTC零点对应的本地日期刚好是前一天,后台如果直接反序列化为本地DateTime,就会出现日期少1天的问题

解决方案

方案1:反序列化时统一按UTC处理后再偏移到目标时区

修改你的反序列化逻辑,先以UTC格式读取日期,再转换到你需要的业务时区:

// 配置序列化规则,强制按UTC读取日期
var jsonSettings = new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
var o = JsonConvert.DeserializeObject<TC>(json, jsonSettings);

// 转换为业务所需的时区时间,示例为中国标准时间
var targetZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
o.Date_EndOfLastMonth = TimeZoneInfo.ConvertTimeFromUtc(o.Date_EndOfLastMonth, targetZone).Date;
// 其余日期字段按相同逻辑处理即可

方案2:将日期字段设为字符串类型,避免自动时区转换

把实体类TC中的所有日期字段改为string类型,让Newtonsoft.Json不会自动做时区转换,后续业务使用时再手动按格式解析:

// TC实体类定义示例
public class TC
{
    public string Date_EndOfLastMonth { get; set; }
    public string Date_EndOfLastYear { get; set; }
    public string ValuationKeyDate { get; set; }
    // 其余业务字段
}

// 需要转换为DateTime时手动解析
var businessDate = DateTime.ParseExact(o.Date_EndOfLastMonth, "yyyy-MM-dd", CultureInfo.InvariantCulture);

方案3:自定义提交逻辑(仅适用自定义嵌入场景)

如果是自己嵌入的自适应卡片渲染器,可以在提交事件中手动把日期转成字符串再提交,该方案不适用Teams原生客户端场景,优先选择前两种方案即可。

内容的提问来源于stack exchange,提问作者Aron Gabor Kelsch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:09:00