如何在任何日历中确定相对于给定月份的即将到来的月份?
How to determine upcoming months relative to a given month in any calendar?
如何根据我 select 的日历找出相对于给定月份的即将到来的月份?
这意味着我 select 编辑了公历并且给定的月份是九月,将显示以下月份的列表:
[9 月、10 月、11 月、12 月]
如果回历是 selected 并且当前月份是:Dhu al-Qa'dah,将显示剩余月份的列表,它们是:
[Dhul Qi'dah, Dhul Hijjah]
我使用了以下参考来制作代码,但它不起作用
System.Globalization.CultureInfo(DateLangCulture, false).DateTimeFormat
在 .NET Framework 中,月份名称基于文化。如果我清楚地理解你的问题,你想要 select 一些“日历”并想要列出其中的几个月。我认为这种方法存在问题,因为不同的文化可能使用相同的日历,而这些不同的文化可能有不同的月份名称。
例如,让我们为您的日历取 GregorianCalendar
, if you wanna list english-based month names, you can clearly use a culture like InvariantCulture
which you will get January
, February
, March
etc.. But on the other side, Turkish culture (tr-TR
) also uses GregorianCalendar
as a calendar but it's month names are like Ocak
, Şubat
, Mart
etc. That means, even if you choose a "right" CultureInfo
,您可能也有语言问题。我希望你能理解我的担忧。一个日历月 可能 有不同的语言,因为它们属于不同的文化。
如果你真的想根据日历获得这些,你可以创建一个 CultureInfo
,它使用 selected 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 个元素是一个空字符串。)
仅补充 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-us
CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
输出:
fr
CultureInfo culture = CultureInfo.GetCultureInfo("fr")
输出:
如果您对我的代码有任何疑问,请在下方发表评论。
如何根据我 select 的日历找出相对于给定月份的即将到来的月份?
这意味着我 select 编辑了公历并且给定的月份是九月,将显示以下月份的列表:
[9 月、10 月、11 月、12 月]
如果回历是 selected 并且当前月份是:Dhu al-Qa'dah,将显示剩余月份的列表,它们是:
[Dhul Qi'dah, Dhul Hijjah]
我使用了以下参考来制作代码,但它不起作用
System.Globalization.CultureInfo(DateLangCulture, false).DateTimeFormat
在 .NET Framework 中,月份名称基于文化。如果我清楚地理解你的问题,你想要 select 一些“日历”并想要列出其中的几个月。我认为这种方法存在问题,因为不同的文化可能使用相同的日历,而这些不同的文化可能有不同的月份名称。
例如,让我们为您的日历取 GregorianCalendar
, if you wanna list english-based month names, you can clearly use a culture like InvariantCulture
which you will get January
, February
, March
etc.. But on the other side, Turkish culture (tr-TR
) also uses GregorianCalendar
as a calendar but it's month names are like Ocak
, Şubat
, Mart
etc. That means, even if you choose a "right" CultureInfo
,您可能也有语言问题。我希望你能理解我的担忧。一个日历月 可能 有不同的语言,因为它们属于不同的文化。
如果你真的想根据日历获得这些,你可以创建一个 CultureInfo
,它使用 selected 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 个元素是一个空字符串。)
仅补充 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-us
CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
输出:
fr
CultureInfo culture = CultureInfo.GetCultureInfo("fr")
输出:
如果您对我的代码有任何疑问,请在下方发表评论。