如何更改日期格式';2017年1月27日至2017年1月27日;在C#中?

如何更改日期格式';2017年1月27日至2017年1月27日;在C#中?,c#,datetime,C#,Datetime,我正在使用C和.netframework4.0开发WPF应用程序。我想更改应用程序屏幕中日期和显示的格式。目前,我正在以这种格式显示日期-mm/dd/yyyy,即(2017年1月27日)。我想将格式从“01/27/2017”更改为“26JA2017” 我试过下面的代码 value = Convert.ToDateTime(currentDate).ToString("ddMMMyyyy"); 上述代码将日期从2017年1月27日更改为2017年1月27日。我希望它是2017年7月27日。客户来

我正在使用
C
.netframework4.0
开发
WPF
应用程序。我想更改应用程序屏幕中日期和显示的格式。目前,我正在以这种格式显示日期-
mm/dd/yyyy
,即
(2017年1月27日)
。我想将格式从
“01/27/2017”
更改为
“26JA2017”

我试过下面的代码

value = Convert.ToDateTime(currentDate).ToString("ddMMMyyyy");
上述代码将日期从2017年1月27日更改为2017年1月27日。我希望它是2017年7月27日。客户来自法国,他需要日期格式为法语


你们谁能帮我把日期格式从
“2017年1月27日”
转换成
“2017年1月27日”

首先,如果您需要特定语言格式的日期,您应该将相应的
CultureInfo
传递到
ToString

.ToString(..., CultureInfo.GetCultureInfo("fr-FR"));

此外,这是不明确的,不是一种标准格式,因此最简单的方法是在几个月内使用一个查找表,然后自己构造字符串。

我不认为它有任何解决方案,但您可以尝试
split()
函数,并通过在日期的两位数+月份的两个字母后拆分日期,再次合并字符串,希望对您有所帮助

我认为您所指的是加拿大标准,正如所解释的那样
value = Convert.ToDateTime(currentDate).ToString("ddMMyyyy",new CultureInfo("fr-FR"));
.Net不提供该转换,但您可以执行以下操作:

Dictionary<string, string> abbr = new Dictionary<string, string>() {    
                                                                    {"Jan","JA"},
                                                                    { "Feb","FE"},
                                                                    { "Mar","MR"},
                                                                    { "Apr","AL"},
                                                                    { "May","MA"},
                                                                    { "Jun","JN"},
                                                                    { "Jul","JL"},
                                                                    { "Aug","AU"},
                                                                    { "Sep","SE"},
                                                                    { "Oct","OC"},
                                                                    { "Nov","NO"},
                                                                    { "Dec","DE"}

            };
string val = Convert.ToDateTime(DateTime.Now).ToString("ddMMMyyyy",
                                        System.Globalization.CultureInfo.InvariantCulture);

var newstr = abbr.Aggregate(val, (current, value) =>
 current.Replace(value.Key, value.Value));
Dictionary abbr=newdictionary(){
{“Jan”,“JA”},
{“Feb”,“FE”},
{“Mar”,“MR”},
{“Apr”,“AL”},
{“May”,“MA”},
{“Jun”,“JN”},
{“Jul”,“JL”},
{“Aug”,“AU”},
{“Sep”,“SE”},
{“Oct”,“OC”},
{“Nov”,“NO”},
{“Dec”,“DE”}
};
string val=Convert.ToDateTime(DateTime.Now).ToString(“ddMMMyyyy”,
系统、全球化、文化信息、不变文化);
var newstr=缩写聚合(val,(当前,值)=>
当前.Replace(value.Key,value.value));

据我猜测,您需要加拿大的缩写:

哪个是英文/法文名称

缩略语在某些方面有点奇怪的原因是 它们基于完整的英文月份名称和 完整的法国月份名称

如果是您的情况,我建议使用自定义日期时间格式:

   // fr-FR - France (The customer is from [Mainland?] France)
   // fr-CA - Canada (Origin of the abbreviations)
   DateTimeFormatInfo caFormat = 
     (DateTimeFormatInfo) (CultureInfo.GetCultureInfo("fr-FR").DateTimeFormat.Clone());

   caFormat.AbbreviatedMonthNames = new string[] { 
     "JA", "FE", "MR", "AL", "MA", "JN", "JL", "AU", "SE", "OC", "NO", "DE", "" };
使用

结果

   01MR2016

3月1日和5月1日会是什么样子?它们是否都是2017年01月01日?六月/七月也一样吗?是来自
Janvier
还是
一月的
JA
?四月会是AP
AP
还是AV
?事实上——由于模棱两可,基本上这是一个非常糟糕的主意。这就是为什么框架中不支持它…这不是一种法语格式。这只是一些系统的自定义格式。您必须创建一个查找数组-只需创建一个包含名称的12个元素数组,并使用
[date.Month-1]
作为索引,它表示法语日期格式为dd-mm-yyyy(dd=2位日,mm=2位月,yyyy=4位年),并且它将ISO规范声明为“NF EN 28601”-所以我支持你的客户想要一些非常奇怪的东西的声音。(我现在不会对法国人发表任何声明;)哈哈)
MM
不是指“两个字母的月”-它是指“两位数的月”。什么
Split
功能?DateTime没有拆分函数,字符串也没有任何分隔符。从日期值本身检索日期元素就像调用
date.Month
@PanagiotisKanavos一样简单,我认为它们的意思是
子字符串
@ethalcoder字符串操作是一个坏主意,因为您可以直接从日期获取月份object@PanagiotisKanavos我知道,这不是我的想法。查找会很容易-只有一个带有月份缩写的
字符串[12]
<代码>日期。第一个月可以用作索引
   01MR2016