C#日期时间异常错误
我在excel中有一个日期列,它的格式一直是2016年2月1日(将来可能会更改为2016年2月1日),对于每一行,它们都会添加到backgroundworker中的数据表中 循环遍历每个datatable行,我获取date列并尝试更改几次日期,以获得正确的sqlite格式保存到数据库中 见下文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
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日的日期格式,无空格