Jus*_*tin 6 c# localization time-format datetime-format
我正在尝试为法国客户设置日期格式.
我需要格式化Times,如以下示例所示......
06:00 - > 6小时
08:45 - > 8小时45
10:30 - > 10小时30
15:00 - > 15小时
17:22 - > 17小时22
18:00 - > 18小时
我已经能够使用自定义日期和时间格式.但我似乎仍然坚持这种表示法国(至少加拿大人)如果他们是零"00"则不显示会议纪要.
目前我使用以下格式.
myDateTime.ToString("H \h mm")
Run Code Online (Sandbox Code Playgroud)
如何才能使"mm"仅在> 00时出现?
我想避免使用扩展方法或代理类,因为我觉得这应该构建到框架中.显然是法国时代的标准格式.
我的字符串"H\h mm"实际上来自资源文件.即...
myDateTime.ToString(Resources.Strings.CustomTimeFormat);
Run Code Online (Sandbox Code Playgroud)
我有一些坏消息要告诉你。该框架不支持您正在寻找的格式。下面的代码证明了这一点:
using System;
using System.Globalization;
namespace ConsoleApplication1
{
public class Program
{
static void Main(string[] args)
{
// FR Canadian
Console.WriteLine("Displaying for: fr-CA");
DisplayDatesForCulture("fr-CA");
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
// FR French
Console.WriteLine("Displaying for: fr-FR");
DisplayDatesForCulture("fr-FR");
Console.WriteLine();
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
static void DisplayDatesForCulture(string culture)
{
var ci = CultureInfo.GetCultureInfo(culture);
var dt = new DateTime(2010, 10, 8, 18, 0, 0);
foreach (string s in ci.DateTimeFormat.GetAllDateTimePatterns())
Console.WriteLine(dt.ToString(s));
}
}
}
Run Code Online (Sandbox Code Playgroud)
该应用程序显示所有支持的日期时间格式。它们都不支持 18:00 ==> 18 h 等概念。
您最好的选择是编写扩展方法或类似的方法。
文化敏感方法:构建扩展助手类:
public static class DateHelper
{
public static string ToLocalizedLongTimeString(this DateTime target)
{
return ToLocalizedLongTimeString(target, CultureInfo.CurrentCulture);
}
public static string ToLocalizedLongTimeString(this DateTime target,
CultureInfo ci)
{
// I'm only looking for fr-CA because the OP mentioned this
// is specific to fr-CA situations...
if (ci.Name == "fr-CA")
{
if (target.Minute == 0)
{
return target.ToString("H' h'");
}
else
{
return target.ToString("H' h 'mm");
}
}
else
{
return target.ToLongTimeString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样测试:
var dt = new DateTime(2010, 10, 8, 18, 0, 0);
// this line will return 18 h
Console.WriteLine(dt.ToLocalizedLongTimeString(CultureInfo.GetCultureInfo("fr-CA")));
// this line returns 6:00:00 PM
Console.WriteLine(dt.ToLocalizedLongTimeString());
var dt2 = new DateTime(2010, 10, 8, 18, 45, 0);
// this line will return 18 h 45
Console.WriteLine(dt2.ToLocalizedLongTimeString(CultureInfo.GetCultureInfo("fr-CA")));
// this line returns 6:45:00 PM
Console.WriteLine(dt2.ToLocalizedLongTimeString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4826 次 |
| 最近记录: |