将任何日期字符串转换为当前文化日期格式
Posted
技术标签:
【中文标题】将任何日期字符串转换为当前文化日期格式【英文标题】:Convert any date string to current culture date format 【发布时间】:2016-10-19 10:46:31 【问题描述】:假设我有一个日期字符串输入,即“30.03.2016”(即在这里假设它可能是任何语言格式),但我目前的文化是美国。我想将输入转换为 Windows 保存的区域设置文化。我使用以下格式进行转换,但给了我无效的日期时间。
var myDateTimeValue = "30.03.2015";
DateTime myDateTime = DateTime.Parse(myDateTimeValue);
var dateingddmmyy = myDateTime.ToString(new CultureInfo("sv-SE"));
Console.Write(dateingddmmyy);
请告诉我如何将任何类型的日期字符串转换为当前的文化格式。
【问题讨论】:
“任何语言格式”都有问题。 “05/06/2016”应该是 6 月 5 日(按照英国格式)还是 5 月 6 日(按照美国格式)? 你的代码在我的电脑上运行良好 @JonSkeet 我的要求i“任何语言格式”是否可以转换???? 不是很明确,不是。我举了一个例子,两种语言格式都为不同的输入提供相同的输出...... 【参考方案1】:来源日期可以是:
dd-mm-yyyy dd/mm/yyyy, mm-dd-yyyy, mm/dd/yyyy yyyy-MM-dd我建议您退后一步,更详细地探索您要解决的问题。也许你不需要从任何数据格式转换,也许有办法提供这样的。
【讨论】:
感谢@David Rutkowski 刚刚发布了我的答案【参考方案2】:下面我已经解决了我的问题:
string[] formats = "M/d/yyyy", "MM/dd/yyyy",
"d/M/yyyy", "dd/MM/yyyy",
"yyyy/M/d", "yyyy/MM/dd",
"M-d-yyyy", "MM-dd-yyyy",
"d-M-yyyy", "dd-MM-yyyy",
"yyyy-M-d", "yyyy-MM-dd",
"M.d.yyyy", "MM.dd.yyyy",
"d.M.yyyy", "dd.MM.yyyy",
"yyyy.M.d", "yyyy.MM.dd",
"M,d,yyyy", "MM,dd,yyyy",
"d,M,yyyy", "dd,MM,yyyy",
"yyyy,M,d", "yyyy,MM,dd",
"M d yyyy", "MM dd yyyy",
"d M yyyy", "dd MM yyyy",
"yyyy M d", "yyyy MM dd"
;
DateTime dateValue;
foreach (string dateStringFormat in formats)
if (DateTime.TryParseExact(strDateTime, dateStringFormat,CultureInfo.CurrentCulture,DateTimeStyles.None,
out dateValue))
return dateValue.ToShortDateString();
【讨论】:
什么是有人会使用格式数组中不存在的自定义日期格式? 唯一的解决方案,你必须首先在数组中添加格式..我不认为他们是上述解决方案的替代方案..因为如果用户输入任何日期,那么格式必须在数组,以便在此基础上完成投射.. @DawidRutkowski ..rest 如果您提出更好的建议,欢迎... 为什么不简单地将验证添加到用户应该输入日期的字段?这样您就可以确保日期始终采用相同的格式。 看我的问题不是验证在这里..我的要求是用户可以输入任何格式的日期字符串...但是我必须根据 Windows 本地设置对其进行转换..所以这就是格式进来的原因更多图片..如果验证是唯一目的,那么您的建议是合适的@DawidRutkowski以上是关于将任何日期字符串转换为当前文化日期格式的主要内容,如果未能解决你的问题,请参考以下文章