我想在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()
函数,但是出现异常。
我收到以下错误:
无法将字符串识别为有效的 DateTime。
你的日期时间字符串中不包含秒数。你需要在格式中反映这一点(删除:ss
)。
另外,如果你使用24小时制的时间,你需要指定H
而不是h
:
DateTime.ParseExact("04/30/2013 23:00", "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)
更多信息请参见:
str = "6"; dtm = DateTime.ParseExact(str, "d", CultureInfo.InvariantCulture);
对我来说失败了。有什么想法吗? - Si8DateTime.ParseExact()
方法。
使用指定的格式和特定于区域性的格式信息,将日期和时间的指定字符串表示形式转换为其 DateTime 等效项。 字符串表示形式的格式必须与指定的格式完全匹配。
DateTime date = DateTime.ParseExact("04/30/2013 23:00",
"MM/dd/yyyy HH:mm",
CultureInfo.InvariantCulture);
这里有一个演示
。
hh
代表12小时制,范围从01到12,HH
代表24小时制,范围从00到23。
更多信息,请查看自定义日期和时间格式字符串
。
试试这个:
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);
}
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")。很奇怪,但这是唯一对我有效的方法。
注:Original Answer翻译成"最初的回答"DateTime dt1 = DateTime.ParseExact([YourDate], "dd-MM-yyyy HH:mm:ss",
CultureInfo.InvariantCulture);
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方法(字符串,字符串[],IFormatProvider,DateTimeStyles)
以下代码对我有效:
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);
您可以使用此类型格式(从SQL Server获取格式化数据)
FORMAT(convert(datetime,'16/04/2018 10:52:20',103),'dd/MM/yyyy HH:mm:ss', 'en-us')
格式化(convert(datetime,'16/04/2018 10:52:20',103),'dd/MM/yyyy HH:mm:ss', 'en-us')
CONVERT(VARCHAR,convert(datetime,'16/04/2018 10:52:20',103), 120)
public static DateTime? ToDateTime(this string dateTime)
{
if (string.IsNullOrEmpty(dateTime))
{
return null;
}
return DateTimeOffset.ParseExact(dateTime, new string[] { "MMM dd, yyyy", "dd/MM/yyyy", "d/M/yyyy", "dd-MM-yyyy", "d-M-yyyy", "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-dd" }, CultureInfo.InvariantCulture).DateTime;
}
char formatChar = '-';
if (dateTime.Contains('-'))
{
formatChar = '-';
}
if (dateTime.Contains('/'))
{
formatChar = '/';
}
string[] parts = dateTime.Split(formatChar);
var month = parts[0].PadLeft(2, '0');
var day = parts[1].PadLeft(2, '0');
var year = parts[2];
string properFormattedDate = $"{month}{formatChar}{day}{formatChar}{year}";
return DateTimeOffset.ParseExact(properFormattedDate, new string[] { "MMM dd, yyyy", "dd/MM/yyyy", "dd-MM-yyyy", "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-dd" }, CultureInfo.InvariantCulture).DateTime;
ParseExact
的?我猜你在传递格式时漏掉了一些东西,简单猜测应该是使用HH
而不是hh
,因为你使用的是24小时制。 - V4Vendetta