Datetime D:打印当前月份的编号而不是其名称

Datetime D:打印当前月份的编号而不是其名称,datetime,d,datetime-format,Datetime,D,Datetime Format,我需要获取当前月份的编号,而不是名称: void main() { SysTime dt = Clock.currTime(); writeln(dt.month); } 输出为: oct 但是我需要10。我怎样才能得到它?我只找到了一个解决方案,将它转换为int,但是有没有更好的方法,或者可以吗?用于转换类型 这似乎有效: 导入标准conv; 导入标准日期时间; 进口std.stdio; void main() { SysTime dt=Clock.currTime();

我需要获取当前月份的编号,而不是名称:

void main()
{
    SysTime dt = Clock.currTime();
    writeln(dt.month);
}
输出为:

oct
但是我需要
10
。我怎样才能得到它?我只找到了一个解决方案,将它转换为int,但是有没有更好的方法,或者可以吗?

用于转换类型

这似乎有效:

导入标准conv;
导入标准日期时间;
进口std.stdio;
void main()
{
SysTime dt=Clock.currTime();
写入(dt.月至!ushort);
}


不需要显式转换,因为默认情况下,月份枚举的类型为int(查看更多信息)


如果您只是需要打印,请使用下面的
writefln

writefln("%d", dt.month);
如果需要使用编号,则可以使用
模板,通常应将其用于转换

writeln(dt.month.to!size_t);
// or ...
writeln(to!size_t(dt.month));
最终你也可以投下它

writeln(cast(size_t)dt.month);

发生这种情况的原因是
writeln
为所有提供的值调用
toString
。我是否可以阻止它调用
toString
?我确信您不能也不想这样做。(好的,您可以向它传递一个字符串…)
to
不会在
Month
和任何数字类型(例如
int
)之间执行显式转换。它执行隐式转换,因为
Month
int
在传递到
isImplicitlyConvertible
模板时返回
true
<代码>0+月
看起来像垃圾,应该避免<编码>到
绝对是正确的方法。您可以使用
isImplicitlyConvertible自己检查它!(月,整数)
返回true。因为这个原因被否决了。谁在谈论到?枚举已经被这样使用了几十年(也许你有理由认为它被滥用了)<代码>0+月作为示例给出,这样的操作也是可能的。应该很容易理解,
int monthnum=month也可以。另外,为什么我要检查月份是否可以隐式转换为int??-我们都知道是这样的!:)
writeln(dt.month.to!size_t);
// or ...
writeln(to!size_t(dt.month));
writeln(cast(size_t)dt.month);