2011-07-11 22 views

回答

7

我只看到一個解決方案 - 您應該獲得當前的文化顯示格式,將其打上補丁以便它符合您的要求,並最終使用修補格式字符串格式化您的DateTime值。下面是一些示例代碼:

string pattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; 
     DateTime dt = DateTime.Now; 
     string[] format = pattern.Split(new string[] { CultureInfo.CurrentCulture.DateTimeFormat.DateSeparator }, StringSplitOptions.None); 
     string newPattern = string.Empty; 
     for(int i = 0; i < format.Length; i++) { 
      newPattern = newPattern + format[i]; 
      if(format[i].Length == 1) 
       newPattern += format[i]; 
      if(i != format.Length - 1) 
       newPattern += CultureInfo.CurrentCulture.DateTimeFormat.DateSeparator; 
     } 

正如所承諾的,這裏是改良版:

/// <summary> 
/// Extensions for the <see cref="DateTime"/> class. 
/// </summary> 
public static class DateTimeExtensions 
{ 
    /// <summary> 
    /// Provides the same functionality as the ToShortDateString() method, but 
    /// with leading zeros. 
    /// <example> 
    /// ToShortDateString: 5/4/2011 | 
    /// ToShortDateStringZero: 05/04/2011 
    /// </example> 
    /// </summary> 
    /// <param name="source">Source date.</param> 
    /// <returns>Culture safe short date string with leading zeros.</returns> 
    public static string ToShortDateStringZero(this DateTime source) 
    { 
     return ToShortStringZero(source, 
      CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern, 
      CultureInfo.CurrentCulture.DateTimeFormat.DateSeparator); 
    } 

    /// <summary> 
    /// Provides the same functionality as the ToShortTimeString() method, but 
    /// with leading zeros. 
    /// <example> 
    /// ToShortTimeString: 2:06 PM | 
    /// ToShortTimeStringZero: 02:06 PM 
    /// </example> 
    /// </summary> 
    /// <param name="source">Source date.</param> 
    /// <returns>Culture safe short time string with leading zeros.</returns> 
    public static string ToShortTimeStringZero(this DateTime source) 
    { 
     return ToShortStringZero(source, 
      CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern, 
      CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator); 
    } 

    private static string ToShortStringZero(this DateTime source, 
     string pattern, 
     string seperator) 
    { 
     var format = pattern.Split(new[] {seperator}, StringSplitOptions.None); 

     var newPattern = string.Empty; 

     for (var i = 0; i < format.Length; i++) 
     { 
      newPattern = newPattern + format[i]; 
      if (format[i].Length == 1) 
       newPattern += format[i]; 
      if (i != format.Length - 1) 
       newPattern += seperator; 
     } 

     return source.ToString(newPattern, CultureInfo.InvariantCulture); 
    } 
} 
+0

謝謝,它的工作真的很好,我會稍微改進它。 – xsl

+0

完成它。工作得很好,但我只用en-US和de-AT – xsl

12

您可以使用DateTimeFormatInfo.CurrentInfoShortDatePatternShortTimePattern做翻譯:

// Change the culture to something different 
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-AT"); 
DateTime test_datetime = new DateTime(2008, 10, 2, 3, 22, 12); 
string s_date = test_datetime.ToString(DateTimeFormatInfo.CurrentInfo); 

// For specifically the short date and time 
string s_date1 = 
    test_datetime.ToString(DateTimeFormatInfo.CurrentInfo.ShortDatePattern); 
string s_time1 = 
    test_datetime.ToString(DateTimeFormatInfo.CurrentInfo.ShortTimePattern); 

// Results 
// s_date1 == 02.10.2008 
// s_time1 == 03:22 
3

你也可以覆蓋CurrentThread.CurrentCulture類。在你的程序的開始調用此方法:

private void FixCurrentDateFormat() 
    { 
     var cc = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); 
     var df = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat; 
     df.FullDateTimePattern = PatchPattern(df.FullDateTimePattern); 
     df.LongDatePattern = PatchPattern(df.LongDatePattern); 
     df.ShortDatePattern = PatchPattern(df.ShortDatePattern); 
     //change any other patterns that you could use 

     //replace the current culture with the patched culture 
     System.Threading.Thread.CurrentThread.CurrentCulture = cc; 
    } 

    private string PatchPattern(string pattern) 
    { 
     //modify the pattern to your liking here 
     //in this example, I'm replacing "d" with "dd" and "M" with "MM" 
     var newPattern = Regex.Replace(pattern, @"\bd\b", "dd"); 
     newPattern = Regex.Replace(newPattern, @"\bM\b", "MM"); 
     return newPattern; 
    } 

有了這個,你在任何地方顯示日期爲你的程序將有新的格式的字符串。

+0

進行測試。匹配中的\ b backspace字符是什麼? – jpierson

+0

啊忘了它,我想出了它(字邊界)。 http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_escapes – jpierson

0

我寫了一個方法,這樣做類型的轉換:

/// <summary> 
/// Transform DateTime into short specified format 
/// </summary> 
/// <param name="strDateTime">string : input DateTime</param> 
/// <param name="cultureInfo"></param> 
/// <param name="strFormat">string - optional : ouput format - default "d"</param> 
/// <returns></returns> 
public static string ConvertDateTimeToShortDate(string strDateTime, CultureInfo cultureInfo, string strFormat="d") 
{ 
    var dateTime = DateTime.MinValue; 
    return DateTime.TryParse(strDateTime, out dateTime) ? dateTime.ToString(strFormat, cultureInfo) : strDateTime; 
} 

稱呼它,時間格式:

DateTimeTools.ConvertDateTimeToShortDate(DateTime.Today.ToString(), 
      CultureInfo.InvariantCulture,"t"); 

希望它可以幫助ü

相關問題