Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 打印日期时间,其区域性格式与解析日期时间的区域性格式相同,但年份组件较短_C#_Datetime - Fatal编程技术网

C# 打印日期时间,其区域性格式与解析日期时间的区域性格式相同,但年份组件较短

C# 打印日期时间,其区域性格式与解析日期时间的区域性格式相同,但年份组件较短,c#,datetime,C#,Datetime,根据您使用的文化,有多种表示日期的方法 假设我将美国日期定为2018年1月2日:2018年1月2日 我想创建一个方法,该方法以相同的区域性格式返回相同的值,但年组件只有两位数 例如: dd/mm/yyyy -> dd/mm/yy mm/dd/yyyy -> mm/dd/yy yyyy-mm-dd -> yy-mm-dd 我的输入将是.ToSortDate在许多文化中据我所知,没有合适的方法来实现这一点,因此以下内容应被视为黑客行为 让我们假设日期保存在日期时间中。它是如何到达那里的并不重要 现在

根据您使用的文化,有多种表示日期的方法

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

我想创建一个方法,该方法以相同的区域性格式返回相同的值,但年组件只有两位数

例如:

dd/mm/yyyy -> dd/mm/yy mm/dd/yyyy -> mm/dd/yy yyyy-mm-dd -> yy-mm-dd
我的输入将是.ToSortDate在许多文化中

据我所知,没有合适的方法来实现这一点,因此以下内容应被视为黑客行为

让我们假设日期保存在日期时间中。它是如何到达那里的并不重要

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

在几乎所有的区域性中,短日期格式似乎都包含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,而不仅仅是此处显示的当前区域性。

您的问题非常不清楚。@CDrosos但我认为很难区分日期格式的随机更改,如yyyy/mm/dd、dd.mm.yyyy等等……您的输入是什么?字符串还是日期时间?如果是DateTime,您只需在.ToString.com中使用不同的参数,就无法以适当的方式使其在任何区域性中工作,因为没有专门针对两位数年份的规则。因此,我只需要获取文化X的任何长和/或短格式字符串,然后用yy替换yyyy(如果有),然后在日期上使用该字符串。这是一种黑客行为,我非常怀疑是否有合适的解决方案。
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);