如何根据我选择的日历找出相对于给定月份的未来月份?
意思是我选择了公历并且给定的月份是九月,将会出现以下月份的列表:
[September, October, November, December]
如果选择回历并且当前月份是:Dhu al-Qa’dah,则会出现剩余月份的列表,分别是:
[Dhul Qi'dah, Dhul Hijjah]
我使用以下参考来制作代码,但它不起作用
System.Globalization.CultureInfo(DateLangCulture, false).DateTimeFormat
在 .NET Framework 中,月份名称基于区域性。如果我清楚地理解你的问题,你想选择一些“日历”并列出其中的一些月份。我认为这种方法存在问题,因为不同的文化可能使用相同的日历,并且这些不同的文化可能有不同的月份名称。
GregorianCalendar
为例,如果您想列出基于英语的月份名称,您可以清楚地使用像InvariantCulture
这样的文化,您将得到January
,February
,March
等..但另一方面,土耳其文化(tr-TR
)也使用GregorianCalendar
作为日历,但它的月份名称如Ocak
,Şubat
,Mart
等。这意味着,即使您为您的日历选择“正确”CultureInfo
,您可能也会遇到语言问题。我希望你能理解我的担忧。日历月份可能有不同的语言,因为它们属于文化。
如果您确实想根据日历获取这些内容,您可以创建一个
CultureInfo
,它使用选定的 Calendar
并将其 MonthNames
属性列为以当前月份开头的字符串数组。
例如;对于
GregorianCalendar
,您可以使用 InvariantCulture
月份名称;
CultureInfo.InvariantCulture.DateTimeFormat.MonthNames
一月 二月 行进 四月 可能 六月 七月 八月 九月 十月 十一月 十二月
对于
HijriCalendar
,您可以使用 ar-SA
文化(它使用 UmAlQuraCalendar
,在我看来,它与 HijriCalendar
足够接近)是哪个月份名称;
(new CultureInfo("ar-SA")).DateTimeFormat.MonthNames
姆姆姆 噗噗噗 详情 详情 阿尔及利亚 阿尔及利亚 瑞巴 巴兰 默罕默德 阿尔法 噗噗噗噗噗
它们可以翻译成英文;
您可以获得当前月份数字:
var currentMonthNo = Datetime.Now.Month;
然后你可以开始从它的前一个索引(从数组开始索引 0 开始)迭代到数组的末尾(注意,有些日历有 13 个月,这就是为什么 12 个月文化中的第 13 个元素数组是一个空字符串。)
namespace ConsoleApp1 {
internal class Program {
static void Main (string[] args) {
//CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
//CultureInfo culture = CultureInfo.GetCultureInfo("ar-SA");
CultureInfo culture = CultureInfo.GetCultureInfo("fr");
List<KeyValuePair<int,string>> months = new List<KeyValuePair<int,string>>();
for (int i = getCurMonth(); i <= 12; i++)
{
months.Add(new KeyValuePair<int, string>(i, DateTime.Parse(DateTime.Now.Year.ToString() + "-" + i + "-1").ToString("MMMM", culture)));
}
foreach (KeyValuePair<int, string> month in months)
{
Console.WriteLine(month.Value);
}
Console.ReadLine();
}
static int getCurMonth () {
return DateTime.Now.Month;
}
}
}
您可以看到以下示例:
CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
输出:
CultureInfo culture = CultureInfo.GetCultureInfo("fr")
输出:
如果您对我的代码有疑问,请在下面评论。