将任何日期字符串转换为当前文化日期格式

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

以上是关于将任何日期字符串转换为当前文化日期格式的主要内容,如果未能解决你的问题,请参考以下文章

字符串值到日期格式的液体转换

如何在 BigQuery 中以字符串格式将工作日月份转换为日期?

如何将 UTC 日期时间字符串转换为用户的当前时区?

如何使用格式化程序将字符串日期转换为 nsdate?

在android中将字符串转换为日期格式

php时间格式怎么转换?