字符串到C#中的DateTime转换

时间:2008-12-03 04:39:26

标签: c#

愚蠢的问题,但无法解决它... 我有一个格式为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

5 个答案:

答案 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”);

http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

的详细信息