如何确定任何日历中相对于给定月份的即将到来的月份?

问题描述 投票:0回答:2

如何根据我选择的日历找出相对于给定月份的未来月份?

意思是我选择了公历并且给定的月份是九月,将会出现以下月份的列表:

[September, October, November, December]

如果选择回历并且当前月份是:Dhu al-Qa’dah,则会出现剩余月份的列表,分别是:

[Dhul Qi'dah, Dhul Hijjah]

我使用以下参考来制作代码,但它不起作用

System.Globalization.CultureInfo(DateLangCulture, false).DateTimeFormat
c# datetime calendar globalization
2个回答
1
投票

在 .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

姆姆姆 噗噗噗 详情 详情 阿尔及利亚 阿尔及利亚 瑞巴 巴兰 默罕默德 阿尔法 噗噗噗噗噗

它们可以翻译成英文;

enter image description here

您可以获得当前月份数字:

var currentMonthNo = Datetime.Now.Month;

然后你可以开始从它的前一个索引(从数组开始索引 0 开始)迭代到数组的末尾(注意,有些日历有 13 个月,这就是为什么 12 个月文化中的第 13 个元素数组是一个空字符串。)


0
投票

仅补充Soner Gönül的答案。

如果想根据当前系统日历获取公历月份,可以参考以下代码:

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;
            }
        }
    }

要获取特定国家的日历,系统必须安装相应的字符集。

您可以看到以下示例:

en-我们

CultureInfo culture = CultureInfo.GetCultureInfo("en-US");

输出:

enter image description here

fr

CultureInfo culture = CultureInfo.GetCultureInfo("fr")

输出:

enter image description here

如果您对我的代码有疑问,请在下面评论。

© www.soinside.com 2019 - 2024. All rights reserved.