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

绑定MS Access的DataGridView及iTextSharp导出PDF时间格式错误问题

问题根因

  1. Access的Date/Time类型本质是同时存储日期+时间的复合值,底层用双精度浮点数实现:整数部分代表1899年12月30日之后的天数,小数部分代表当天时间的占比。你单独存储日期时没有传入时间部分,默认补0对应12:00:00 AM;单独存储时间时没有传入日期部分,默认补0对应1899/12/30,这就是时间值显示带1899年日期的原因。
  2. DataGridView绑定Date/Time类型字段时,默认会输出完整的日期+时间内容,不会自动识别你要单独展示日期还是时间。
  3. 导出PDF时你直接读取了原始DateTime值或者DataGridView的默认显示内容,没有做自定义格式化,因此保留了多余的部分。

修复步骤

1. 修正DataGridView显示格式

数据绑定完成后,手动指定两个列的显示格式即可:

// 日期列仅显示日期
dataGridView1.Columns["Date"].DefaultCellStyle.Format = "dd/MM/yyyy";
// 时间列仅显示时间+上午/下午标识
dataGridView1.Columns["Time"].DefaultCellStyle.Format = "hh:mm:ss tt";

如果是通过设计器绑定的数据源,也可以直接在列属性的DefaultCellStyle→Format项中填入对应格式字符串。

2. 修正iTextSharp导出PDF的格式

导出时不要直接读取原始DateTime值,手动做格式化后再写入PDF单元格:

// 处理日期列
string pdfDate = Convert.ToDateTime(dataRow["Date"]).ToString("dd/MM/yyyy");
// 处理时间列
string pdfTime = Convert.ToDateTime(dataRow["Time"]).ToString("hh:mm:ss tt");

(可选)优化插入逻辑

你当前插入时把DateTime转成字符串再入库,容易出现格式歧义,建议直接传入DateTime类型值:

// 插入日期直接传日期部分,自动清空时间
var dateValue = datetimepicker.Value.Date;
// 插入时间直接传时间部分
var timeValue = DateTime.Now.TimeOfDay;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:18:00