[英]Convert date string to DateTime format
我有日期字符串,例如03/10/1999
,格式为dd/MM/yyyy
(pt-BR 格式)。
我需要将此日期转换为类似 SQL 的格式yyyy-MM-dd HH:mm:ss.fff
。
我尝试使用 Parse 和 ParseExact 函数,但到目前为止没有成功。 我会让我的结果在下面......
使用解析
var BrazilianDate = "03/10/1999";
var Parse = DateTime.Parse(BrazilianDate, new CultureInfo("pt-BR"));
Console.WriteLine("Parsed date: " + Parse);
Output: Parsed date: 10/3/1999 12:00:00 AM
没有连字符或毫秒...
使用ParseExact
var BrazilianDate = "03/10/1999";
var ParseExact = DateTime.ParseExact(BrazilianDate, "yyyy-MM-dd HH:mm:ss.fff", new CultureInfo("pt-BR"));
Console.WriteLine(ParseExact);
output:
运行时异常(第 -1 行):字符串未被识别为有效的 DateTime。
堆栈跟踪:
[System.FormatException: String 未被识别为有效的 DateTime。] 在 System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style) at System.DateTime.ParseExact(String s, String format, IFormatProvider provider)在 Program.Main()
您需要使用正确的格式字符串格式化 output,如下所示:
Console.WriteLine("Parsed date: " + Parse.ToString("yyyy-MM-dd HH:mm:ss.fff"));
//Parsed date: 1999-10-03 00:00:00.000
如果您没有指定格式,.NET 会选择它认为正确的任何格式(当您不在美国时,通常不是这样)。
您还需要严格区分DateTime
值及其以string
形式表示的形式。 无论您如何格式化它,值本身都将保持不变。
您在parse
方法中使用的格式字符串表示输入字符串的格式。
DateTime
没有显示格式,实际上它是一个数值,表示自特定 Epoch 以来的刻度数。 来自官方文档:
时间值以 100 纳秒为单位,称为滴答声。 一个特定的日期是自 GregorianCalendar 日历中 0001 年 1 月 1 日午夜 12:00 以来的刻度数。 该数字不包括闰秒添加的刻度。 例如,刻度值 31241376000000000L 表示日期为 0100 年 1 月 1 日星期五午夜 12:00:00。
解析字符串时,我发现最好使用ParseExact
或TryParseExact
。 要打印DateTime
值的字符串表示形式,请使用ToString
的重载,它接受表示您要显示的格式的string
。
var BrazilianDateString = "03/10/1999";
var DateTimeValue = DateTime.ParseExact(BrazilianDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
Console.WriteLine(DateTimeValue.ToString("yyyy-MM-dd HH:mm:ss.fff");
这段代码对我有用:
DateTime dt = new DateTime();
string x = "03/10/1999 22:10:10";
dt = DateTime.Parse(x);
Console.WriteLine(dt.ToShortDateString());
Console.WriteLine(dt.ToShortTimeString());
Console.ReadLine();
控制台 output:
1999 年 3 月 10 日
22:10
不要使用那个 CultureInfo,DateTime 可以自己理解西班牙-巴西的日期
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.