Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Excel中修复不正确的日期和时间值?_C#_Excel_Excelpackage - Fatal编程技术网

C# 如何从Excel中修复不正确的日期和时间值?

C# 如何从Excel中修复不正确的日期和时间值?,c#,excel,excelpackage,C#,Excel,Excelpackage,我正在使用EPPlus excelpackage和c从电子表格中获取值。电子表格有两个单独的列日期和时间。问题是日期值为2/4/2020,但返回为2/4/2020 12:00:00 AM。时间值为12:21am,但返回12/30/1899 12:21pm。我想要的结果是返回电子表格中的值。我不清楚为什么会发生这种情况,也不清楚如何根据我的需要解决这个问题 using (ExcelPackage package = new ExcelPackage(fs)) { Excel

我正在使用
EPPlus excelpackage
c
电子表格中获取值。电子表格有两个单独的列
日期
时间
。问题是日期值为
2/4/2020
,但返回为
2/4/2020 12:00:00 AM
。时间值为
12:21am
,但返回
12/30/1899 12:21pm
。我想要的结果是返回
电子表格中的值。我不清楚为什么会发生这种情况,也不清楚如何根据我的需要解决这个问题

using (ExcelPackage package = new ExcelPackage(fs))
    {
        ExcelWorkbook excelWorkBook = package.Workbook;
        ExcelWorksheet ws = excelWorkBook.Worksheets.First();
        int rowCount = 0;
        rowCount = ws.Dimension.End.Row;

        for (int r = 2; r <= rowCount; r++)
        {
            string status = ws.Cells[r, 11].Value?.ToString();
            string deliveredDate = ws.Cells[r, 15].Value?.ToString();
            string deliveredTime = ws.Cells[r, 17].Value?.ToString();
        }
        fs.Close();
    }
}
使用(ExcelPackage=新的ExcelPackage(fs))
{
Excel工作簿Excel工作簿=package.工作簿;
Excel工作表ws=Excel工作簿.Worksheets.First();
int rowCount=0;
rowCount=ws.Dimension.End.Row;

对于(int r=2;r而言,这是所述值的实际值2个字符串表示之间的正常混合。这种情况尤其发生在日期时间值上

问题是日期值为“2/4/2020”,但返回为“2/4/2020 12:00:00 AM”

日期本身并不能真正起作用。几十年来,我们一直都有日期时间。日期和时间作为独立的类型?基本上已经不存在了。这是很难解释的事情之一,但一旦你遇到根本问题,它就会变得明显


由于在输入过程中没有给出具体的时间,默认值为-00:00:00或12 AM。然后将单元格设置为仅显示“日期”部分。相当于“2020年2月4日12:00:00 AM”的内容实际上就是那里的内容。显示引擎称为Microsoft Excel(或您使用的任何东西)只是被告知不要通过单元格格式显示该部分。

没有问题。Excel将日期存储为OADate值-本质上是具有特定含义的两倍。ePlus理解OADate,并将日期时间存储为OADate。日期或时间的显示方式取决于单元格的样式。如果修改字符串,则会破坏日期。不要触摸该值,修改单元格样式。我不清楚您的建议的标题。如果您的意思是修改电子表格中的单元格样式,我没有权限这样做。我应该解析出我需要的值吗?使用例如
ws.Cells[r,11].style.Numberformat.Format=“yyyy-mm-dd”
ws.Cells[r,11].Style.Numberformat.Format=“mm/dd/yyyy”;
仅将值显示为日期。
hh:mm
对于时间,等等,您已经在尝试修改电子表格。问题是错误的样式。您必须修复它。值没有问题,问题是样式。文档解释了OADate是什么,end解释了基数实际上是1899年12月30日。因此,如果时间值的格式为日期,它将显示为
12/30/1899 12:21:00 PM