如何在 C# 中将月份名称(字符串)解析为整数以进行比较?
我需要能够比较数组中的一些月份名称。
如果有一些直接的方法就好了,比如:
Month.toInt("January") > Month.toInt("May")
我的谷歌搜索似乎表明唯一的方法是编写你自己的方法,但这似乎是一个足够常见的问题,我认为它已经在.Net中实现了,以前有人这样做过吗?
I need to be able to compare some month names I have in an array.
It would be nice if there were some direct way like:
Month.toInt("January") > Month.toInt("May")
My Google searching seems to suggest the only way is to write your own method, but this seems like a common enough problem that I would think it would have been already implemented in .Net, anyone done this before?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(15)
DateTime.ParseExact(monthName, "MMMM", CultureInfo.CurrentCulture ).Month
不过,出于您的目的,您最好只创建一个code> 将月份名称映射到其值。
Dictionary
DictionaryDateTime.ParseExact(monthName, "MMMM", CultureInfo.CurrentCulture ).Month
Although, for your purposes, you'll probably be better off just creating a
Dictionary<string, int>
mapping the month's name to its value.你可以这样做:
You could do something like this:
如果您使用几个人建议的
DateTime.ParseExact()
方法,您应该仔细考虑当应用程序在非英语环境中运行时您希望发生什么!在丹麦,
ParseExact("Januar", ...)
和ParseExact("January", ...)
哪个应该有效,哪个应该失败?这就是
CultureInfo.CurrentCulture
和CultureInfo.InvariantCulture
之间的区别。If you use the
DateTime.ParseExact()
-method that several people have suggested, you should carefully consider what you want to happen when the application runs in a non-English environment!In Denmark, which of
ParseExact("Januar", ...)
andParseExact("January", ...)
should work and which should fail?That will be the difference between
CultureInfo.CurrentCulture
andCultureInfo.InvariantCulture
.一个简单的解决方案是创建一个包含名称和值的字典。 然后使用 Contains() 您可以找到正确的值。
One simply solution would be create a Dictionary with names and values. Then using Contains() you can find the right value.
您可以使用 DateTime.Parse 方法获取 DateTime 对象,然后检查其 Month 属性。 做这样的事情:
技巧是构建一个有效的日期来创建一个 DateTime 对象。
You can use the DateTime.Parse method to get a DateTime object and then check its Month property. Do something like this:
The trick is to build a valid date to create a DateTime object.
您可以使用月份的枚举:
不过,我对 enum.Parse() 的语法不是 100% 确定。
You can use an enum of months:
I am not 100% certain on the syntax for enum.Parse(), though.
您不必创建 DateTime 实例来执行此操作。 就这么简单:
我正在
da-DK
文化上运行,所以这个单元测试通过了:我将把它作为练习留给读者,以创建一个可以传入的重载明确的文化信息。
You don't have to create a DateTime instance to do this. It's as simple as this:
I'm running on the
da-DK
culture, so this unit test passes:I'll leave it as an exercise to the reader to create an overload where you can pass in an explicit CultureInfo.
警告代码为 Beta 版本。
caution code is in Beta version.
在问题提出七年后回答这个问题,可以使用内置方法进行比较:
为简单起见
,可以将其重构为扩展方法。 以下是 LINQPad 示例(因此调用
Dump()
方法):输出:
And answering this seven years after the question was asked, it is possible to do this comparison using built-in methods:
becomes
Which can be refactored into an extension method for simplicity. The following is a LINQPad example (hence the
Dump()
method calls):With output:
如果您使用的是 c# 3.0(或更高版本),您可以使用扩展器
If you are using c# 3.0 (or above) you can use extenders
我将其翻译成西班牙语版本的 C# 代码,问候:
I translate it into C# code in Spanish version, regards:
我所做的是使用 SimpleDateFormat 创建一个格式字符串,并将文本解析为日期,然后从中检索月份。 代码如下:
What I did was to use SimpleDateFormat to create a format string, and parse the text to a date, and then retrieve the month from that. The code is below:
此代码适用于
awk
,但很容易适应C/C++/C#
— 在
awk
中,所有索引都是” 1-based"
而不是"0-based"
- 参考字符串的前缘"="
只是预移动位置。 对于任何基于 0 的语言,删除该"="
`参考字符串一开始可能看起来很奇怪 -
因此OP可以输入月份的英文名称,完整的或缩写的,它会返回一个零填充的2位月份数字。 如果您需要它是整数形式,那么只需擦掉执行填充的中间行即可。
您会注意到仅声明了 1 个输入变量,并且没有任何其他临时变量 -
awk
的主要优势之一是其极端敏捷性涉及变量的动态类型,即使对于真正不合逻辑的操作,例如取
string
变量的"0th-power"
这会无缝地将该变量强制转换为
数字
数据类型,新值为1
。这种灵活性使得在不再需要原始输入值时可以出于任何其他目的回收和重新使用输入临时变量。
This code is for
awk
, but easily adaptable toC/C++/C#
— in
awk
, all indices are"1-based"
instead of"0-based"
- the leading edge"="
of the reference string is simply pre-shifting the positions. remove that"="
for any 0-based languages`The reference string might look odd at first -
So OP can input the english name of the months, full or abbreviated, and it'll return a zero-padded 2-digit month number. If you need it to be in integer form, then just scrub out the middle line that performs the padding.
You'll notice only 1 input variable declared and no other temp variables whatsoever - one of
awk
's major strengths is its extreme agility when it comes to dynamic typing of variables,even for truly illogical operations like taking the
"0th-power"
of astring
variable likeThis would seamlessly coerce that variable to a
numeric
data type, with a new value of1
.This flexibility enables the recycling and re-using of the input temp variable(s) for any other purpose the moment the original input value(s) is/are no longer needed.
这段代码可以帮助您...
GetMonthName 方法 - 它返回字符串...
如果您想获取整数月份,那么只需使用 -
我希望,它可以帮助您!
谢谢!!!
This code helps you...
GetMonthName Method - it returns string...
If you want to get a month as an integer, then simply use -
I hope, it helps you!!!
Thanks!!!