C#中与Java的Calendar相对应的是什么?

6

我正在将Java转换为C#,需要转换涉及Calendar的代码:

Calendar rightNow = Calendar.getInstance();
StringBuilder sb = new StringBuilder();
sb.append((rightNow.get(Calendar.MONTH) + 1));
sb.append(rightNow.get(Calendar.DAY_OF_MONTH));
sb.append(rightNow.get(Calendar.YEAR)).substring(2);
sb.append(rightNow.get(Calendar.HOUR_OF_DAY));
sb.append(rightNow.get(Calendar.MINUTE));

更多编辑 因为有两种可能的方法(System.DateTime和Calendar),所以我应该使用哪一个?(我在这里提到了Java宇宙中的问题)

回答摘要 对于简单的用途,System.DateTime是合适的,并且不具有Java Date的问题。如果在调用之间日期向前移动,则应进行一次单独的调用。


1
System.DateTime 应该可以做到。 - George Stocker
我希望没有。我的意思是,无论替代方案是什么,它肯定比那个可怕的日历好。 - Alexander Pogrebnyak
3个回答

7
你需要的是 System.DateTime 结构体。

首选方法:

sb.Append(DateTime.Now.AddMonths(1).ToString("MMddyyHHmm"));

作为 Joel Coehoorn 指出的,你可以将那段代码压缩成一行。我在实现上已经过于沉迷,没有看到你实际想要做什么 - 幸运的是,Joel 指出了这一点。
这将把所有这些内容都合并成一个调用。相当巧妙。

直接翻译(不建议):

要将您的 Java 代码转换为 C#,您需要执行以下操作:
string year = DateTime.Now.Year.ToString();
sb.Append(DateTime.Now.AddMonths(1));
sb.Append(DateTime.Now.Day);
sb.Append(year.Substring(2));
sb.Append(DateTime.Now.Hour);
sb.Append(DateTime.Now.Minute);

您可以复制/粘贴以下C#代码进行查看:
StringBuilder sb = new StringBuilder();
string year = DateTime.Now.Year.ToString();
sb.Append(String.Format("Next Month is: {0} \n ",DateTime.Now.AddMonths(1)));
sb.Append(String.Format("Day is {0}\n ", DateTime.Now.Day));
sb.Append(String.Format("Year is {0}\n ", year.Substring(2)));
sb.Append(String.Format("The Hour is {0}\n ", DateTime.Now.Hour)); //getting late
sb.Append(String.Format("The Minute is {0}\n ", DateTime.Now.Minute));

关于Java中的DateTime问题

DateTime结构没有Java在日期实现方面遇到的问题,所以你不应该遇到困扰Java世界的同样的问题。

其他方法

正如另一个用户指出的,你也可以使用System.Globalization.Calendar类。我只用DateTime结构就能很好地工作,它比Calendar类更轻量级,但两者都可以使用。如果你要在日期和日历实现之间跳转,那么选择Calendar类;如果你要坚持一种日期实现,那么DateTime结构就足够了。


2
或者更好的是,将所有内容压缩到DateTime.Now.AddMonths(1).ToString("MMddyyHHmm")。 - Joel Coehoorn
1
你应该避免反复调用DateTime.Now,然后再操作日期部分;如果在获取DateTime.Now.Day和DateTime.Now.Hour之间时钟跨过午夜会怎么样? - Roger Lipscombe
非常好的观点,Roger。在这个方面,我会将“更新”提升到顶部作为“首选方式”。+1 - George Stocker

6
System.DateTime

就像:

DateTime now = DateTime.Now;
DateTime tommorowsTomorrow = now.AddDays(2);

等等其他的内容。


2

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