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

FullCalendar选择事件的本地化开始时间在.NET 9 MVC中解析失败,求解决方法

FullCalendar选择事件的本地化开始时间在.NET 9 MVC中解析失败,求解决方法

遇到这种本地化时间解析的坑确实头疼,我给你两个可行的解决思路,优先推荐第一种,省心又可靠:

方法一:让FullCalendar输出通用的ISO8601标准时间格式

这是最稳妥的方案,因为ISO8601是跨语言、跨时区的通用时间格式,完全避开本地化解析的问题。

FullCalendar返回的selectionInfo.start本质是一个JavaScript的Date对象,我们可以直接调用它的toISOString()方法,生成标准的UTC时间字符串(比如2024-12-30T07:30:00.000Z),然后再赋值给隐藏输入框:

document.addEventListener('DOMContentLoaded', function() {
const calOpts = {
  locale: 'ee',
  slotDuration: '00:15:00',
  slotLabelInterval: '00:15',
  allDaySlot: false,
  selectConstraint: 'businessHours',
  select : function( selectionInfo  ) {
     // 修改这里,调用toISOString()获取标准格式
     document.getElementById('start').value = selectionInfo.start.toISOString();
     },
    selectable: true,
   events: { url: 'api/fullcalendar' }
   }
  const calendarEl = document.getElementById('calendar')
  calendar = new FullCalendar.Calendar(calendarEl, calOpts)
  calendar.render()
})

对应的.NET控制器代码可以简化,不用指定文化就能直接解析:

[HttpPost]
public async Task<IActionResult> Kinnitatud(string start) {
    // ISO格式无需指定文化,直接解析并转UTC
    DateTime algus = DateTimeOffset.Parse(start).UtcDateTime;
    // 后续业务逻辑...
}

方法二:自定义格式让.NET解析本地化时间字符串

如果一定要保留FullCalendar返回的本地化格式,那需要针对返回的字符串格式做自定义解析。问题出在返回的字符串包含了带括号的时区描述(比如(Ida-Euroopa standardaeg)),.NET默认的解析规则不识别这种格式,所以需要手动指定匹配的格式字符串:

using System.Globalization;

[HttpPost]
public async Task<IActionResult> Kinnitatud(string start) {
    // 定义匹配的格式,注意用单引号固定非可变部分(比如GMT),括号里的时区名称用zzzz匹配
    string timeFormat = "ddd MMM dd yyyy HH:mm:ss 'GMT'zzz (zzzz)";
    // 因为月份、星期是英文缩写(Mon、Dec),所以用InvariantCulture解析
    DateTime algus = DateTime.ParseExact(start, timeFormat, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
    // 后续业务逻辑...
}

不过这个方法有个局限性:不同浏览器返回的时区描述可能有差异,比如有些浏览器可能不会带括号里的内容,或者格式略有不同,稳定性不如第一种方法。


备注:内容来源于stack exchange,提问作者Andrus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:23:00