C# C语言中字符串到日期时间的转换#

C# C语言中字符串到日期时间的转换#,c#,C#,愚蠢的问题,但不能让我的头周围。。。 我有一个格式为20081119的字符串 我有一个C#方法,它将字符串转换为日期时间,然后输入到SQL Server数据库中 public static DateTime MyDateConversion(string dateAsString) { return System.DateTime.ParseExact(dateAsString, "yyyyMMdd", System.Globalization.CultureInfo.

愚蠢的问题,但不能让我的头周围。。。 我有一个格式为20081119的字符串

我有一个C#方法,它将字符串转换为日期时间,然后输入到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

Date Time是一个类,默认情况下,它的ToString格式为19/11/2008 12:00:00 AM

这是可以帮助你的

因为日期和时间的出现 时间值取决于这些参数 文化,国际, 标准、应用要求、, 个人喜好,约会时间 结构提供了大量的功能 灵活设置日期和日期的格式 通过 它的ToString方法。默认值 方法返回 日期和日期的字符串表示形式 使用当前区域性的时间值 短日期和长时间模式。这个 下面的示例使用默认值 要显示的DateTime.ToString()方法 使用短日期的日期和时间 对于en-US来说,这是一种长时间的模式 文化,当前的文化 运行示例的计算机

因此,您可以将DateTime上的ToString重载为所需的格式,否则直接将字符串表示形式传递给存储过程。

没有“yyyyMMdd类型的DateTime”之类的东西;DateTime只是一个大整数,表示一个历元中的时间量—它没有格式。但这很好,因为您无论如何都应该使用参数化的TSQL,所以只需添加DateTime作为DbParameter的值,它将以明确的方式传递给db(不要使用字符串连接来构建TSQL命令):

或者对于
SqlCommand

cmd.Parameters.Add("@foo", SqlDbType.DateTime).Value = yourDateTime;
如果您确实需要一个字符串,那么只需将该字符串直接用作[n][var]char参数即可

另外-在本例中,要解析日期,我将使用不变区域性(因为该格式中没有区域性):

从对话中,您可能还需要从DateTime转换为字符串,在这种情况下,只需将其反转:

string dateString = yourDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture);

我想这是因为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());

尝试一下,看看它是否适合您。

这将给出您想要的确切结果:

转换(varchar(10),getdate(),112):将日期时间转换为字符串(YYYYMMDD格式)

转换(datetime,'20081203',112):字符串到datetime(YYYYMMDD格式)

代码端:

DateTimeFormatInfo fmt=(新文化信息(“hr”))。DateTimeFormat; Console.WriteLine(thisDate.ToString(“d”,fmt));//显示15.3.2008(根据您的要求使用类似格式)

date1.ToString(“YYYYMMDD”,CultureInfo.CreateSpecificCulture(“en-US”)) 日期1.ToString(“YYYYMMDD”)


有关详细信息,请访问

好的,回到文化方面。。。当你说:

日期是这样出来的:日期 =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));
您有一个有效的日期,所以格式应该不重要,但是如果有,并且您需要以您描述的格式获取它,那么您需要在转换为字符串时对其进行格式设置。。。如果它已经是一个字符串,那么就不需要进行日期转换


我可能看错了你的问题,但我必须把它说出来,因为它让我很烦恼。

你在哪里看到yyyyMMdd的日期时间?您正在向biztalk映射程序发送什么?我看不到区域性影响上述格式。。。它已经完全明确,没有地方持有人。文化是唯一的原因,我可以看到的日期和月份转换立场。。。这是我能想到的唯一一件事。事实上,我应该提到一些位是为utc偏移量保留的——但主要是一个大整数-p这涵盖了TSQL方面——但最初的问题是在C方面
var dateString = "20081119";
var enUS = new System.Globalization.CultureInfo("en-US");
var resultingDate = DateTime.ParseExact(dateString,"yyyyMMdd",enUS);
Console.WriteLine(resultingDate.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));