C#日期时间格式转换

C#日期时间格式转换,c#,datetime,C#,Datetime,我在datetime的转换上有问题。我的日期字符串为MM/dd/yyyy。现在我需要将其转换为yyyy-MM-dd 但我面临一些错误。请帮忙 public static DateTime ToDBDateTime(string _dateTime) { string sysFormat = "MM/dd/yyyy hh:mm:ss tt"; string _convertedDate = string.Empty; if (_dateTim

我在datetime的转换上有问题。我的日期字符串为
MM/dd/yyyy
。现在我需要将其转换为
yyyy-MM-dd

但我面临一些错误。请帮忙

 public static DateTime ToDBDateTime(string _dateTime)
 {
        string sysFormat = "MM/dd/yyyy hh:mm:ss tt";

        string _convertedDate = string.Empty;

        if (_dateTime != null || _dateTime != string.Empty)
        {
            _convertedDate = DateTime.ParseExact(_dateTime, sysFormat, System.Globalization.CultureInfo.InvariantCulture).ToString(_toDBDateFormat);
            //_convertedDate = Convert.ToDateTime(_dateTime).ToString(_toDBDateFormat);
           /// Debug.Print(sysFormat);
        }

        return Convert.ToDateTime(_convertedDate);
    }
我想知道是否有任何方法可以以各种格式传递
datetime
,它将返回预期的格式

例如:如果我将日期传递为
dd/MM/yyyy
MM/dd/yyyy
,则上述函数将以
yyyy-MM-dd
格式返回日期


请提供一些解决日期时间问题的建议。

由于您有一个格式为“MM/dd/yyyy”的字符串中的日期,并希望将其转换为“yyyy-MM-dd”,您可以这样做:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)

由于您有一个格式为“MM/dd/yyyy”的字符串中的日期,并且希望将其转换为“yyy-MM-dd”,您可以这样做:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)

我试过这个,效果很好

DateTime date1 = new DateTime(2009, 8, 1);
date1.ToString("yyyy-MM-dd hh:mm:ss tt");
您可以在此ToString中应用任何格式

希望有帮助
米林

我试过这个,效果很好

DateTime date1 = new DateTime(2009, 8, 1);
date1.ToString("yyyy-MM-dd hh:mm:ss tt");
您可以在此ToString中应用任何格式

希望有帮助
Milind使用内置的tostring,如下所示:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)

使用内置的tostring,如下所示:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)
我有一个日期字符串MM/dd/yyyy

对。。。但你却试图这样解析它:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)
您需要提供一个与您的输入匹配的格式字符串-那么为什么要包含时间部分呢?你可能只是想:

string sysFormat = "MM/dd/yyyy";
然而,这并不是问题的结束。然后将该
DateTime
转换回如下字符串:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)
。。。并再次解析它:

return Convert.ToDateTime(_convertedDate);
你到底为什么要这么做?您应该尽可能避免字符串转换。除此之外,
\u toDBDateFormat
(一个引起我怀疑的变量名)和
Convert.ToDateTime
(总是使用当前区域性进行解析)将如何兼容

你应该:

  • 计算出您希望如何处理给定的空字符串或null,然后只返回适当的
    DateTime
  • 否则,只需使用正确的格式进行解析
你问题的这一部分也与我有关:

例如:如果我将日期传递为dd/MM/yyyy或MM/dd/yyyy,则上述函数将以yyyy-MM-dd格式返回日期

没有“格式为yyyy-MM-dd的日期”这样的东西。
DateTime
只是一个日期和时间值。它没有内在的格式。设置格式时,可以指定要如何设置格式。但是,如果要将该值用于数据库查询,则无论如何都不应将其再次转换为字符串-应使用参数化SQL,并仅将其作为
日期时间提供

我有一个日期字符串MM/dd/yyyy

对。。。但你却试图这样解析它:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)
您需要提供一个与您的输入匹配的格式字符串-那么为什么要包含时间部分呢?你可能只是想:

string sysFormat = "MM/dd/yyyy";
然而,这并不是问题的结束。然后将该
DateTime
转换回如下字符串:

DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        dt.ToString("yyyy-MM-dd");
Convert.ToDateTime(_convertedDate).ToString("MM/dd/yyyy") or whatever format you want.
string sysFormat = "MM/dd/yyyy hh:mm:ss tt";
...
_convertedDate = DateTime.ParseExact(_dateTime, sysFormat,
                                     CultureInfo.InvariantCulture)
.ToString(_toDBDateFormat)
。。。并再次解析它:

return Convert.ToDateTime(_convertedDate);
你到底为什么要这么做?您应该尽可能避免字符串转换。除此之外,
\u toDBDateFormat
(一个引起我怀疑的变量名)和
Convert.ToDateTime
(总是使用当前区域性进行解析)将如何兼容

你应该:

  • 计算出您希望如何处理给定的空字符串或null,然后只返回适当的
    DateTime
  • 否则,只需使用正确的格式进行解析
你问题的这一部分也与我有关:

例如:如果我将日期传递为dd/MM/yyyy或MM/dd/yyyy,则上述函数将以yyyy-MM-dd格式返回日期


没有“格式为yyyy-MM-dd的日期”这样的东西。
DateTime
只是一个日期和时间值。它没有内在的格式。设置格式时,可以指定要如何设置格式。但是,如果要将该值用于数据库查询,则无论如何都不应将其再次转换为字符串-应使用参数化SQL,并将其作为
日期时间提供给我们显示要分析的日期?日期时间对象没有格式,例如,它们是二进制对象,请看这个,你应该给出一些上下文:你为什么要使用这个函数?为什么输入是字符串格式?此外,您的函数名为
ToDBDateTime
,因此您似乎希望使用结果插入数据库。不需要将DateTime对象转换为
字符串
;请改用参数化sql。@jeroenh:Spot on:)我希望有什么方法可以禁止sql中的文字值……告诉我们您正在解析的日期?DateTime对象没有格式,如果它们是二进制对象,请看一下这个。您应该给出一些上下文:为什么要使用这个函数?为什么输入是字符串格式?此外,您的函数名为
ToDBDateTime
,因此您似乎希望使用结果插入数据库。不需要将DateTime对象转换为
字符串
;请改用参数化sql。@jeroenh:Spot on:)我希望有某种方法可以禁止sql中的文字值……输入和输出格式都不像您所描述的那样-我认为这也忽略了OP假设中的一些更基本的问题。很抱歉,我的格式不好,但是,先生,你能解释一下它忽略了哪些基本问题吗?我对c语言非常陌生,输入和输出格式都不像你所描述的那样-我认为这也忽略了OP的假设中的一些更基本的问题。对不起,我对这些格式不满意,但是先生,你能解释一下它忽略了哪些基本问题吗,我在c#是的。。但我明白了