Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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#日期时间异常错误_C#_Sqlite_Datetime_Datatable - Fatal编程技术网

C#日期时间异常错误

C#日期时间异常错误,c#,sqlite,datetime,datatable,C#,Sqlite,Datetime,Datatable,我在excel中有一个日期列,它的格式一直是2016年2月1日(将来可能会更改为2016年2月1日),对于每一行,它们都会添加到backgroundworker中的数据表中 循环遍历每个datatable行,我获取date列并尝试更改几次日期,以获得正确的sqlite格式保存到数据库中 见下文 foreach datatablerow { //change dots to slashes string dateString = Convert.ToString(rowData

我在excel中有一个日期列,它的格式一直是2016年2月1日(将来可能会更改为2016年2月1日),对于每一行,它们都会添加到backgroundworker中的数据表中

循环遍历每个datatable行,我获取date列并尝试更改几次日期,以获得正确的sqlite格式保存到数据库中

见下文

foreach datatablerow {

    //change dots to slashes 
    string dateString = Convert.ToString(rowData["Date"]).ToString().Replace(".", "/");

    //do DateTime C# Formatting..
    //This is causing the crash/exception
    DateTime _dateString = Convert.ToDateTime(dateString);
    //also have used & crahses as well
    //DateTime _dateString = DateTime.Parse(dateString);

    //Change agian to suit sqlite database entry - 2016/02/01
    string change_dateString = _dateString.ToString("yyyy-MM-dd");

    //Insert database data...

}
但是,我获取System.FormatException:在事务循环中,字符串未被识别为有效的DateTime错误(即使在另一台计算机上,相同的事务使用上述代码工作


当我控制每个日期时,我可以看到它被正确地转换为2016年2月1日,但是日期时间部分崩溃了。

首先,删除这个字符串操作。这是错误的编码

string dateString = Convert.ToString(rowData["Date"]).ToString();
.替换(“.”、“/”)


更新 对
Sqlite
中的
DateTime
值存在一种常见的误解。 为什么?

因为
Sqlite
没有内置的
DateTime
值的存储数据类型。默认情况下
Sqlite
在其数据类型中处理如下日期和时间值:

  • 文本作为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)

  • REAL作为朱利安日的数字,是指根据公历,从公元前4714年11月24日格林威治中午开始的天数

  • 整数 作为Unix时间,自UTC 1970-01-01 00:00:00以来的秒数

如何捕捉错误 所以问题可能是

  • A:将错误的数据类型强制转换为字符串

  • B:您的文本中的
    ISO8601
    以外的其他日期格式(
    [“日期”]

  • C:连接字符串中的其他
    区域性设置

请尝试以下代码:

try
{
    string dateString = rowData["Date"].ToString();    
}
catch (System.Exception ex)
{
    throw new System.Exception("Couldn't get Data from Row! Maybe wrong DataType?")
}    

DateTime dateValue;
if (!DateTime.TryParse(dateString, out dateValue))
{
    // handle parse failure
    throw new System.Exception("Couldn't parse this String: " + dateString)
}

首先,删除这个字符串操作。这是一个糟糕的编码

string dateString = Convert.ToString(rowData["Date"]).ToString();
.替换(“.”、“/”)


更新 对
Sqlite
中的
DateTime
值存在一种常见的误解。 为什么?

因为
Sqlite
没有内置的
DateTime
值的存储数据类型。默认情况下
Sqlite
在其数据类型中处理如下日期和时间值:

  • 文本作为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)

  • REAL作为朱利安日的数字,是指根据公历,从公元前4714年11月24日格林威治中午开始的天数

  • 整数 作为Unix时间,自UTC 1970-01-01 00:00:00以来的秒数

如何捕捉错误 所以问题可能是

  • A:将错误的数据类型强制转换为字符串

  • B:您的文本中的
    ISO8601
    以外的其他日期格式(
    [“日期”]

  • C:连接字符串中的其他
    区域性设置

请尝试以下代码:

try
{
    string dateString = rowData["Date"].ToString();    
}
catch (System.Exception ex)
{
    throw new System.Exception("Couldn't get Data from Row! Maybe wrong DataType?")
}    

DateTime dateValue;
if (!DateTime.TryParse(dateString, out dateValue))
{
    // handle parse failure
    throw new System.Exception("Couldn't parse this String: " + dateString)
}

您是否尝试过设置不变的区域性

 DateTime yourdate= DateTime.ParseExact(rowData["Date"], "yyyy-MM-dd", 
                                       CultureInfo.InvariantCulture)

您是否尝试过设置不变的区域性

 DateTime yourdate= DateTime.ParseExact(rowData["Date"], "yyyy-MM-dd", 
                                       CultureInfo.InvariantCulture)

这是一个更好的解决方案,因为它独立于
CultureInfo
+1DateTime.ParseExact(“01.02.2016”,“yyyy-MM-dd”,CultureInfo.InvariantCulture”);&DateTime.ParseExact(“01/02/2016”,“yyyy-MM-dd”,CultureInfo.InvariantCulture”);仍然使程序崩溃OP提到的“01.02.2016格式”,而不是“yyyyyy-MM-dd”.InvariantCulture在这种情况下可能不适用。这是更好的解决方案,因为它独立于
CultureInfo
+1DateTime.ParseExact(“01.02.2016”,“yyyy-MM-dd”,CultureInfo.InvariantCulture”);&DateTime.ParseExact(“01/02/2016”,“yyyy-MM-dd”,CultureInfo.InvariantCulture”);仍然使OP提到的程序崩溃“01.02.2016格式”,不是“yyyy-MM-dd”".InvariantCulture在这种情况下可能不适用。此问题与您正在使用的计算机上的日期区域性有关,因为操作系统已损坏?您正在开发web或桌面应用程序吗?WPF桌面程序..它与32x和64x位计算机有关吗?不,它与32x或64x没有任何关系。每台计算机都运行一个操作系统that有一个默认的区域性,如“en US”或“en UK”。现在,每个区域性都有不同的日期格式和货币等。当您强制应用程序以不同于计算机上区域性的格式存储/读取日期时,您会得到此例外。此问题与您正在使用的计算机上的日期区域性有关,因为计算机上的操作系统已损坏?您正在开发web或桌面应用程序吗?WPF desktop程序..它与32x和64x位计算机有关吗?不,它与32x或64x没有任何关系。每台机器都运行一个具有默认区域性的操作系统,如“en-US”或“en-UK”。现在,每个区域性都有不同的日期格式和货币等。当您强制应用程序以不同于计算机上区域性的格式存储/读取日期时,您会收到此异常。删除此异常后,字符串操作仍会收到上述异常。只需检查excel单元格,所有单元格均为2016年2月1日日期格式无空格I删除d字符串操作仍出现异常,仅检查excel单元格,所有单元格均为2016年2月1日的日期格式,无空格