2017-03-12 52 views
0

我目前正在製作一個小程序,我想根據cultureinfo顯示日期和時間,如下所示: 星期日,三月3 2017 7:46 :57 AMC#,日期時間格式化,蒙特名稱,cultureinfo

不過,我希望它是可以選擇任何一個國家,並根據他們的寫作日期的方式獲取日期輸出。在丹麥,作爲一個例子,我想表明: Søndag,3集市2017年7時46分57秒(< - 晚上這將是'19:46:57' )

請注意,''位於月份名稱的另一側。

我可以得到所有的cultureinfo使用CultureInfo.GetCultures,沒問題,但是當我顯示日期時間時,我得到'Sunday 3/12/2017 7:46:57 AM'使用MyDateTime.ToString(MyCultureInfo);

我知道如何提取月份名,我可以手動創建一個字符串,所有這些數據正顯示出我想要的,我知道培養的方式,但我不能爲文化,我不知道。如果有人選擇「中國」或「阿拉伯語」,我不知道要展示什麼。

我就在想,如果有辦法讓完整的日期與月份名稱在任何文化中的正確的地方?

+1

有預定義的標準格式,請參見:https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx –

+0

請出示[MCVE] - 有沒有辦法知道你如何弄錯了文化。 –

+0

@EvanTrimboli它不會幫助OP,因爲他們無法根據輸出得到合理的cultureInfo。 –

回答

2

我不認爲你正在尋找的格式是所有文化的默認格式。下面的代碼將顯示指定文化的默認Full格式的日期。 F用於。

var now = DateTime.Now; 
var denmark = now.ToString("F", new CultureInfo("da-DK")); 

根據該行代碼的輸出是:

12. marts 2017 03:34:12 

所以從我的外賣是:丹麥的默認全日期時間模式是以上。如果你想另一種格式,然後用下面的代碼,當你需要調整,但要記住的人在丹麥可能會發現這種模式奇怪,因爲他們可能沒有使用它:

var denmarkCustomized = now.ToString("dddd, MMMM dd, yyyy h:mm:ss tt" 
      , new CultureInfo("da-DK")); 
+0

謝謝,我相信這是儘可能的接近。對於那些沒有出現在所有文化中的那一天的名字來說太糟糕了。如果它失蹤了,這將是一個簡單的任務,包括它。 –

+0

不,一天的名字沒有出現就不算太糟糕:那就是文化想要的,所以我們不能爲他們做出決定。 – CodingYoshi

+0

此外,如果這已回答您的問題,那麼請將其標記爲[回答](http://stackoverflow.com/help/someone-answers),以便其他人知道您的問題已得到解答。否則,請將其打開。 – CodingYoshi

0

這個非定製的代碼片段讓你關閉。

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("da-DK"); 
DateTime dt = DateTime.Now; 
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}"); 
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US"); 
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}"); 
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("ar-AE"); 
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}"); 
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("zh-CN"); 
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}"); 

輸出:

12. marts 2017 20:36:38 
Sunday, March 12, 2017 8:36:38 PM 
12 مارس, 2017 08:36:38 م 
2017年3月12日 20:36:38 

但是,要獲得定製輸出的語言環境,例如在丹麥出現的那一天,你必須編碼特殊情況。

+0

謝謝,我相信這跟我所能得到的一樣。對於那些沒有出現在所有文化中的那一天的名字來說太糟糕了。如果它失蹤了,這將是一個簡單的任務,包括它。 –

0

有類似在FullDateTimePattern中不包括週日的100種文化。你可以看到他們的短節目像this

var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); 

foreach (var culture in cultures.OrderBy(x => x.EnglishName)) 
{ 
    if (!culture.DateTimeFormat.FullDateTimePattern.Contains("dddd")) 
    { 
     Console.WriteLine("{0} ({1}): {2}", culture.EnglishName, culture.Name, culture.DateTimeFormat.FullDateTimePattern); 
    } 
} 

許多歐洲或歐洲後裔的文化不包括它(我看到克羅地亞(克羅地亞)(HR-HR)丹麥語(丹麥) (DA-DK)英語(英國)(EN-GB)法語(加拿大)(FR-CA)瑞典(瑞典)(SV-SE)),再加上我看到日本,俄語,漢語...世界是一個很大的地方,在許多地方,一週的日子不被認爲是日期的一部分。您有兩種選擇:接受它,或者對於任何不喜歡日期模式的文化,請創建包含任何所需內容的 FullDateTimePattern

例如,你可以:

public static CultureInfo DanishCultureInfo = InitCultureInfoWithWeek("da-DK"); 

private static CultureInfo InitCultureInfoWithWeek(string name) 
{ 
    var ci = CultureInfo.GetCultureInfo(name); 
    ci = (CultureInfo)ci.Clone(); 
    ci.DateTimeFormat.FullDateTimePattern = "dddd " + ci.DateTimeFormat.FullDateTimePattern; 
    ci = CultureInfo.ReadOnly(ci); 
    return ci; 
} 

public static CultureInfo GetCultureForPrinting(string name) 
{ 
    var ci = CultureInfo.GetCultureInfo(name); 

    if (string.Equals(name, "da-DK", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     return DanishCultureInfo; 
    } 
    else 
    { 
     return CultureInfo.GetCultureInfo(name); 
    } 
} 

然後當你想用文化來打印而不是使用CultureInfo.GetCultureInfo()的東西,你用GetCultureForPrinting()

0

謝謝大家!你輸入導致我這樣的解決方案:

public string fn_date(DateTime par_datetime, CultureInfo par_cultureinfo) 
     { 
      string st_day = par_datetime.ToString("dddd", par_cultureinfo); 
      string st_date = par_datetime.ToString("T", par_cultureinfo); 
      if (st_date.ToUpper().IndexOf(st_day.ToUpper()) == -1) st_date = st_day + ", " + st_date; 

      return st_date; 
     } 

據我瞭解,當天的名稱不是「標準」,但我需要這樣的原因是因爲我正在做舊和/或癡呆症的人一個應用程序誰難以跟蹤它的日期和月份。 最初我爲我的父親做過這個,他有這個確切的問題。我拿到一臺舊筆記本電腦,並在屏幕底部用大字母清楚地寫下日期和時間。屏幕的其餘部分顯示了他的孫子的各種圖片。這是一個很大的幫助。

所以我想改進它並使其成爲國際化的,所以每個人都可以從我的網站下載並在需要時使用它。

再次感謝!