愚蠢的问题,但无法解决它... 我有一个格式为20081119的字符串
我有一个C#方法将字符串转换为DateTime以输入SQL Server数据库
public static DateTime MyDateConversion(string dateAsString)
{
return System.DateTime.ParseExact(dateAsString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
}
问题是日期是这样的:Date = 19/11/2008 12:00:00 AM我需要它是yyyyMMdd类型的DateTime,因为我将它映射到一个模式来调用一个存储过程。
先谢谢你们。
干杯, CON
答案 0 :(得分:14)
没有“yyyyMMdd类型的DateTime”这样的东西; DateTime只是一个大整数,表示一个纪元中的时间量 - 它没有格式。但这很好,因为你应该使用参数化的TSQL - 所以只需添加DateTime作为DbParameter的值,它将以明确的方式传递给db(不要使用字符串连接来构建TSQL命令) ):
DbParameter param = cmd.CreateParameter();
param.ParameterName = "@foo";
param.DbType = DbType.DateTime;
param.Value = yourDateTime; // the DateTime returned from .ParseExact
cmd.Parameters.Add(param);
或SqlCommand
:
cmd.Parameters.Add("@foo", SqlDbType.DateTime).Value = yourDateTime;
如果你真的需要一个字符串,那么只需将字符串直接用作[n] [var] char参数。
另外 - 在这种情况下,要解析日期我会使用不变文化(因为文化没有格式化):
DateTime yourDateTime =
DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture);
从对话中,您似乎也可能需要从DateTime转到字符串,在这种情况下只需将其反转:
string dateString = yourDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
答案 1 :(得分:1)
日期时间是一个类,默认情况下,它将ToString格式化为19/11/2008 12:00:00 AM
这来自MSDN,可能会对您有所帮助
因为日期和外观的出现 时间值取决于此 文化因素,国际 标准,应用要求, 和个人偏好,DateTime 结构提供了很多 格式化日期和 通过重载的时间值 它的ToString方法。默认 DateTime.ToString()方法返回 字符串表示日期和 使用当前文化的时间价值 短期和长期模式。该 以下示例使用默认值 要显示的DateTime.ToString()方法 使用短日期的日期和时间 和美国的长期模式 文化,当前的文化 运行该示例的计算机。
因此,您可以将DateTime上的ToString重载为所需的格式,否则将字符串表示直接传递给存储过程
答案 2 :(得分:1)
好的,回到文化的事情......当你说:
日期如下:日期 = 19/11/2008 12:00:00 AM
我猜你在日期运行ToString来看到这个结果? ToString中的格式将根据文化而有所不同,默认情况下将使用您当前的文化。
通过这样做,我能够重现你所获得的格式:
var dateString = "20081119";
var fr = new System.Globalization.CultureInfo("fr-FR");
var resultingDate =DateTime.ParseExact(dateString,"yyyyMMdd",System.Globalization.CultureInfo.CurrentCulture);
Console.WriteLine(resultingDate.ToString(fr));
你有一个有效的日期,所以格式化无关紧要,但如果确实如此,你需要以你描述的格式获取格式,那么你需要在转换为字符串时格式化...如果它已经一个字符串,那么就不需要进行日期转换。
我可能会错误地阅读你的问题,但是我不得不把它拿出来b / c这是在困扰我。
答案 3 :(得分:0)
我认为这是由于CurrentCulture中的文化设置,不知道那是什么,我无法确定,但指定en-US在我的最终工作。这是我的代码:
var dateString = "20081119";
var enUS = new System.Globalization.CultureInfo("en-US");
var resultingDate = DateTime.ParseExact(dateString,"yyyyMMdd",enUS);
Console.WriteLine(resultingDate.ToString());
试一试,看看它是否适合你。
答案 4 :(得分:0)
这将提供您正在寻找的确切结果:
convert(varchar(10),getdate(),112):datetime to string(YYYYMMDD format)
convert(datetime,'20081203',112):string to datetime(YYYYMMDD format)
代码方:
DateTimeFormatInfo fmt =(new CultureInfo(“hr-HR”))。DateTimeFormat; Console.WriteLine(thisDate.ToString(“d”,fmt)); //显示15.3.2008(根据您的要求使用类似格式)
或
date1.ToString( “YYYYMMDD”,CultureInfo.CreateSpecificCulture( “EN-US”)) date1.ToString( “YYYYMMDD”);
的详细信息