ओह, मुझे कोई दिलचस्पी होने के लिए नहीं करना चाहता था, लेकिन अब मैं! यहां कोड है जो सभी संस्कृतियों का सम्मान करता है और एएम/पीएम डिजाइनरों को सही स्थिति में प्रस्तुत करता है, साथ ही संस्कृति के आधार पर 24 घंटे के प्रारूप को पहचानता है।
असल में, यह स्थिर विस्तार विधि वर्तमान संस्कृति (कोई पैरामीटर) या निर्दिष्ट संस्कृति लेने के लिए अधिभारित नहीं है।
DateTime.Now.ToTimeString()
DateTime.Now.ToTimeString(someCultureInfo)
कोड से नीचे है, नमूना कार्यक्रम में शामिल हैं:
public static class DateTimeStaticExtensions
{
private static int GetDesignatorIndex(CultureInfo info)
{
if (info.DateTimeFormat
.ShortTimePattern.StartsWith("tt"))
{
return 0;
}
else if (info.DateTimeFormat
.ShortTimePattern.EndsWith("tt"))
{
return 1;
}
else
{
return -1;
}
}
private static string GetFormattedString(int hour,
CultureInfo info)
{
string designator = (hour > 12 ?
info.DateTimeFormat.PMDesignator :
info.DateTimeFormat.AMDesignator);
if (designator != "")
{
switch (GetDesignatorIndex(info))
{
case 0:
return string.Format("{0} {1}",
designator,
(hour > 12 ?
(hour - 12).ToString() :
hour.ToString()));
case 1:
return string.Format("{0} {1}",
(hour > 12 ?
(hour - 12).ToString() :
hour.ToString()),
designator);
default:
return hour.ToString();
}
}
else
{
return hour.ToString();
}
}
public static string ToTimeString(this DateTime target,
CultureInfo info)
{
return GetFormattedString(target.Hour, info);
}
public static string ToTimeString(this DateTime target)
{
return GetFormattedString(target.Hour,
CultureInfo.CurrentCulture);
}
}
class Program
{
static void Main(string[] args)
{
var dt = new DateTime(2010, 6, 10, 6, 0, 0, 0);
CultureInfo[] cultures =
CultureInfo.GetCultures(CultureTypes.SpecificCultures);
foreach (CultureInfo culture in cultures)
{
Console.WriteLine(
"{0}: {1} ({2}, {3}) [Sample AM: {4}/Sample PM: {5}",
culture.Name, culture.DateTimeFormat.ShortTimePattern,
(culture.DateTimeFormat.AMDesignator == "" ?
"[No AM]":
culture.DateTimeFormat.AMDesignator),
(culture.DateTimeFormat.PMDesignator == "" ?
"[No PM]":
culture.DateTimeFormat.PMDesignator),
dt.ToTimeString(culture), // AM sample
dt.AddHours(12).ToTimeString(culture) // PM sample
);
}
// pause program execution to review results...
Console.WriteLine("Press enter to exit");
Console.ReadLine();
}
}
कुछ संस्कृतियां "एच: मिमी" (8:11) का उपयोग करती हैं जबकि अन्य "एचएच: मिमी" (08:11) का उपयोग करते हैं। क्या आप अग्रणी शून्य रखना चाहते हैं या नहीं? – Greg
हम्म .. मैं या तो बस जाऊंगा।लेकिन चूंकि मैं जितना संभव हो सके स्ट्रिंग को रखने की कोशिश कर रहा हूं, इसलिए मैं कोई अग्रणी शून्य पसंद नहीं करूंगा। – InvisibleBacon