Java中的日历类

Java中的日历类,java,calendar,Java,Calendar,我正在尝试使用Calendar类打印HOUR\u OF_DAY,Minute and Second。 我在代码中使用了下面的命令 System.out.println( Calendar.HOUR+" "+ Calendar.HOUR_OF_DAY+" "+ Calendar.MINUTE+" "+ Calendar.SECOND+" " ); 它给出如下输出: 10 11 12 13 即使我运行这几个小时,它也会给出相同的输

我正在尝试使用Calendar类打印
HOUR\u OF_DAY,Minute and Second
。 我在代码中使用了下面的命令

  System.out.println(
      Calendar.HOUR+" "+
      Calendar.HOUR_OF_DAY+" "+
      Calendar.MINUTE+" "+
      Calendar.SECOND+" "
      );
它给出如下输出:

10 11 12 13 
即使我运行这几个小时,它也会给出相同的输出

我以为它会以24小时格式打印当前时间,但我没有得到那个输出

所以我想知道这一天的小时小时应该打印什么


请澄清。

Calendar.HOUR
Calendar.HOUR\u OF\u DAY
等只是用于标识日期/时间方面的常量。它们通常是这样使用的:

Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
我很难想象在任何情况下,你会想要打印出常数本身

现在,即使您正在使用它,您仍然会通过字符串连接将
int
值转换为
String
值,这不知道您想要什么格式,因为您没有明确指定它。没有所谓的“2位数格式的
int
”。。。
int
只是一个数字

您应该研究
DateFormat
SimpleDateFormat
——这是使用标准Java类库格式化日期和时间的首选方法。(我个人鼓励您也研究一种更好的日期/时间API,但这是另一回事。)

例如:

DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
// Prints the current time using 24-hour format
System.out.println(formatter.format(new Date());

看看GregorianCalendar()。这可能就是您要查找的内容。

您所做的是打印日历常数的值

使用
Calendar cal=Calendar.getInstance()创建日历实例(这将创建当前时间和日期具有默认时区和默认区域设置的日历实例)

您可以使用
cal.get(Calendar.HOUR\u of \u DAY)
cal.get(Calendar.HOUR)
打印
HOUR\u of \u DAY,HOUR的值

Calendar cal = Calendar.getInstance();

System.out.println(
  cal.get(Calendar.HOUR)+" "+
  cal.get(Calendar.HOUR_OF_DAY)+" "+
  cal.get(Calendar.MINUTE)+" "+
  cal.get(Calendar.SECOND)+" "
  );

Calendar.HOUR、Calendar.HOUR\u OF_DAY、Calendar.MINUTE和Calendar.SECOND是用于访问Calendar对象中的字段的常量。首先需要创建一个日历对象,然后使用get()方法使用这些常量访问其字段

请尝试获取更多信息

我被乔恩·斯基特打败了——他的回答非常完美,是一个很好的起点。

tl;博士 java.time 现代方法使用java.time类取代了麻烦的旧
Calendar

假设您的
日历
实际上是一个
gregorianalendar
,则强制转换。旧类现在有了新的方法来帮助转换到java.time或从java.time转换到java.time

ZonedDateTime
是替换
GregoriaCalendar
的java.time类

GregoriarCalendar gc = ( GregorianCalendar ) myCal ;
ZonedDateTime zdt = gc.toZonedDateTime() ;
现在询问你想要的部分

int hour   = zdt.getHour() ;
int minute = zdt.getMinute() ;
int second = zdt.getSecond() ;
int nano   = zdt.getNano() ;
提示:您可能希望提取一个
LocalTime
对象,以表示一天中没有日期和时区的时间


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 然后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(我们真的需要一个“被Jon Skeet打败”的徽章。你经常会看到其他人抱怨在一分钟内被同一个答案打败,然后想“忘掉它”,但当它发生在你身上时,你只是觉得……我不知道,我想是真正的业余爱好者吧?仅供参考:我想你在发布后的40秒内就回答了这个问题。这很激烈。@studro事实上,他在被问到之前40秒就回答了这个问题……只是花了很长时间才出现在这里……或者可能出于体育精神,他没有发布a在问题出现在网站上之前回答。@studro-haha+1,你赢了comments@sturdoJon的答案已经在SO数据库中,包括即将发布的答案,管理员们只是在等待问题发布,以便他们提供答案。;)看起来Jon Skeet是RajniKant on SO。在询问某个东西是如何工作的之前,始终检查文档。它再清楚不过了……我检查了一下,但没有理解TOODFYI,像、
      java.text.SimpleDateFormat
      这样麻烦的旧日期时间类现在被java 8和更高版本中内置的类所取代。看见
      int hour   = zdt.getHour() ;
      int minute = zdt.getMinute() ;
      int second = zdt.getSecond() ;
      int nano   = zdt.getNano() ;