如何使用C#从当前日期获取当前季度

10

我正在尝试从当前日期获取当前季度,并将其首先存储为int,然后在我获得当前季度后,比如说它是Q1,我想将Q1存储为字符串。但我遇到了一个错误,错误信息是:未分配本地变量dt。请帮忙解决。谢谢。

DateTime dt;
int quarterNumber = (dt.Month - 1) / 3 + 1;

可能是重复的问题,关于如何确定给定日期的季度,请参考How do I discover the quarter of a given date - Jim G.
4个回答

31

嗯,你没有在任何地方指定“当前日期”——你没有给你的dt变量赋值,这就是编译器所抱怨的。你可以使用:

DateTime dt = DateTime.Today;

请注意,这将使用系统本地时区 - 日期取决于时区。例如,如果您想要当前时刻的UTC日期,您应该使用:

DateTime dt = DateTime.UtcNow.Date;

仔细思考一下你所说的"今天"是什么意思。

另外,一个稍微简单一点的计算方式是:

int quarter = (month + 2) / 3;

1
这是一个不错的开始,最终我使用了这行代码。它更加直接地达到了目标,而不是加2。
Math.Ceiling(DateTime.Today.Month / 3m)

0

dt 目前被赋值为 null。你需要使用 DateTime dt = DateTime.Now; 进行初始化。


3
从技术上讲,“dt”没有被分配到任何东西。 - Andrei
6
特别地,它不能为“null”- “DateTime”不是可空类型。 - Jon Skeet
那么如果不是null,那值是什么呢?指向空的指针?还是在那个时候内存中的垃圾? - Christophe De Troyer
@ChristopheDeTroyer 我觉得你的问题很有趣。这个答案看起来是正确的,也符合我的想法 https://dev59.com/BE7Sa4cB1Zd3GeqP0hZh#2929297 - onefootswill

0

它被初始化为default(DateTime)的值,该值为1/1/0001 12:00:00 AM


只有类字段被初始化为 default(DateTime)。如果它是局部变量,则根本不会初始化,如果您尝试在没有初始化的情况下使用它,编译器将抛出错误,这就是问题所在的地方。 - Mog0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接