12

我想在 C#中将输入字符串格式化为MM/dd/yyyy hh:mm:ss格式。
输入字符串的格式MM/dd/yyyy hh:mm:ss
例如:"04/30/2013 23:00"

我尝试Convert.ToDateTime()了函数,但它认为 4 作为日期,3 作为月份,这不是我想要的。实际上月份是 04,日期是 03。

我也尝试DateTime.ParseExact()了函数,但是得到了异常。

我收到错误:

字符串未被识别为有效的日期时间。

4

8 回答 8

16

您的日期时间字符串不包含任何秒数。您需要在格式中反映这一点(删除:ss)。
此外,您需要指定H而不是h使用 24 小时时间:

DateTime.ParseExact("04/30/2013 23:00", "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)

浏览此处获取更多信息:

自定义日期和时间格式字符串

于 2013-04-15T11:38:22.060 回答
5

你可以使用DateTime.ParseExact()方法。

使用指定的格式和特定​​于区域性的格式信息将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示的格式必须与指定的格式完全匹配。

DateTime date = DateTime.ParseExact("04/30/2013 23:00", 
                                    "MM/dd/yyyy HH:mm", 
                                    CultureInfo.InvariantCulture);

这是一个DEMO.

hh从 01 到 12 表示 12HH小时制,从 00 到 23 表示 24 小时制。

如需更多信息,请查看Custom Date and Time Format Strings

于 2013-04-15T11:39:34.377 回答
3

试试这个:

string strTime = "04/30/2013 23:00";
DateTime dtTime;
if(DateTime.TryParseExact(strTime, "MM/dd/yyyy HH:mm",  
   System.Globalization.CultureInfo.InvariantCulture, 
   System.Globalization.DateTimeStyles.None, out dtTime))
 {
    Console.WriteLine(dtTime);
 }
于 2013-04-15T11:38:36.363 回答
2

如果您的字符串是 2019 年 6 月 15 日,这也可能是问题所在。DateTime Parse 预计它是 2019 年 6 月 15 日。

所以首先用斜线分割它

var dateParts = "6/15/2019"
var month = dateParts[0].PadLeft(2, '0');
var day = dateParts[1].PadLeft(2, '0');
var year = dateParts[2] 


var properFormat = month + "/" +day +"/" + year;

现在您可以使用 DateTime.Parse(properFormat, "MM/dd/yyyy")。这很奇怪,但这只是对我有用的东西。

于 2019-06-16T05:18:06.133 回答
1

改变文化并尝试这样可能对您有用

string[] formats= { "MM/dd/yyyy HH:mm" }
var dateTime = DateTime.ParseExact("04/30/2013 23:00", 
     formats, new CultureInfo("en-US"), DateTimeStyles.None);

检查详细信息:DateTime.ParseExact 方法(String、String[]、IFormatProvider、DateTimeStyles)

于 2013-04-15T11:38:06.667 回答
0
DateTime dt1 = DateTime.ParseExact([YourDate], "dd-MM-yyyy HH:mm:ss",  
                                           CultureInfo.InvariantCulture);

请注意使用 HH(24 小时制)而不是 hh(12 小时制),以及 InvariantCulture 的使用,因为某些文化使用斜线以外的分隔符。

例如,如果文化是 de-DE,则格式“dd/MM/yyyy”将期望句点作为分隔符 (31.01.2011)。

于 2016-07-18T13:51:54.863 回答
0

下面的代码对我有用:

string _stDate = Convert.ToDateTime(DateTime.Today.AddMonths(-12)).ToString("MM/dd/yyyy");
String format ="MM/dd/yyyy";
IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);
DateTime _Startdate = DateTime.ParseExact(_stDate, format, culture);
于 2016-09-30T07:04:55.580 回答
0

您可以使用这种类型格式(从 sql server 获取格式化数据)


FORMAT(转换(日期时间,'16/04/2018 10:52:20',103),'dd/MM/yyyy HH:mm:ss','en-us')


转换(VARCHAR,转换(日期时间,'16/04/2018 10:52:20',103),120)

于 2019-06-24T13:49:11.853 回答