使用与解析时相同的区域性格式打印DateTime,但使用较短的年份组成部分

时间:2018-06-28 20:09:47

标签: c# datetime

根据您使用的文化,有many different ways个代表日期。

假设我将美国日期定为2018年1月2日:“ 1/2/2018”。

我想创建一种方法,以相同的区域性格式返回相同的值,但年份部分只包含两位数字。

例如:

dd/mm/yyyy -> dd/mm/yy
mm/dd/yyyy -> mm/dd/yy
yyyy-mm-dd -> yy-mm-dd

我想使用一个DateTime变量,并在相同的区域性中返回相同的日期变量,但年份格式为yy。

如果我做这样的事情,对每种文化都可以吗?

var year = mydate.ToShortDate.ToString("yy");
var date  = mydate.ToShortDate.Substring(0, mydate.Count() - 4) + year;

在许多文化中,我的输入将是.ToShortDate()

1 个答案:

答案 0 :(得分:2)

据我所知,没有适当的方法来执行此操作,因此以下内容应视为黑客。

让我们假设日期保存在DateTime中。如何到达那里并不重要。

现在的任务是根据短日期格式将其转换为字符串表示形式,不管是哪种形式,但使用yyyy而不是yy。

http://www.basicdatepicker.com/samples/cultureinfo.aspx

在几乎所有文化中,短日期格式似乎都包含yyyy或yy,所以让我们做个假设。

现在可以通过这种方式完成转换。

var sampleDate = new DateTime(1992, 12, 31);
var formatString = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
var newFormatString = formatString.Replace("yyyy", "yy");
var sampleDateAsString = sampleDate.ToString(newFormatString);

如果原始格式字符串不包含“ yyyy”,则新格式字符串将与原始格式字符串相同。

当然,您可以获取任何区域性的ShortDatePattern,而不仅仅是此处所示的当前区域性。