首页 > 编程知识 正文

java获取当前年份月份,java整数类型

时间:2023-05-04 12:52:21 阅读:149629 作者:2191

如何从Date对象(java.util.Date )中将整数作为整数获取

其实,Date的getMonth () )是为了永远而被抛弃的; )

@slhck :已废止。 从JDK 1.1版开始,已被calendar.get(calendar.month )替换。

@adarshr这就是我没有写答案的原因。 对于特定且充分研究的问题,这么多!

@Zenzen我没有在大多数废弃的班级里看到使用舍弃方法的问题。

如果正在处理@Muhd日期,请自行帮助使用joda和其他库。

@slhck我喜欢参考使用Stack Overflow,但是这个有欠缺,所以问。

@Serabe )问题是有更好的解决方案(至少是不舍弃的解决方案)。 然后getMonth被推荐了14年,由于某种原因被废弃了。

@Zenzen :这是一个关于使用类的笑话,其中包含构造函数的33个方法中有22个方法几乎都被取消了。 对不起,我被误解了。

java.util.Date date=new Date (;

calendar cal=calendar.getinstance (;

cal.settime(date;

intmonth=cal.get (calendar.month;

请注意,Calendar.MONTH基于ZERO,没有明确的理由1月==0。 虽然目前在API中记录得很好,但对第一次使用的用户来说仍然很困惑。 我还没找到能告诉我为什么这么做的人——也许是时候自己问新问题了。(

@Voo Date.getMonth ()方法基于零,这可能是Calendar.MONTH的主要原因。

@Muhd确实是它的替代品。 但是,这只是将问题转移到为什么Date.getMonth ()为零上。 Imo的设计很可怕,特别是从一天开始(他们至少可以保持一致性! 请参阅。 我认为这只是在包括日期和日历在内的非特别精心设计的API上的疏忽。 但是,可能有一些先例。 那对我来说看起来很奇怪,根据我的经验给一个以上的初学者带来了问题。

实际上有人问了这个问题。 底线是tnat,这是设计不好的API的结果。 我的意思是你提到整个Date类只是开玩笑。 有趣的是,不仅Java,- iirc JavaScript的Date getMonth ()也以0开始。

@Voo getYear () )也是“没有明显的原因”,扣除1900年。

@MateuszDymczyk原来的JS日期只是Java的克隆

这个答案没能解决时区的问题。 对于月末日期和时间值,结果中的月数会根据JVM当前的默认时区而变化。 最好明确指定期待/期待的时区。

Java.time(Java8) )。

也可以在Java 8中使用java.time包将java.util.Date对象转换为java.time.LocalDate对象,并只使用getMonthValue ()方法

Date date=new Date (;

localdatelocaldate=date.to instant (.at zone ) zoneid.systemdefault ) ).toLocalDate );

intmonth=local date.getmonth value (;

请注意,此处提供的月份值介于1和12之间,与adarshr答案的cal.get(calendar.month )相反,提供的值介于0和11之间。

但是,正如Basil Bourque在注释中所述,建议使用LocalDate:getMonth方法获取Month枚举对象。

很好的回答。 读者注意:您可能需要指定时区,而不依赖于答案中显示的默认调用。 Montr&; #233; al,新的一天(和一个月)早些时候在巴黎开始了。 特别是Montr&; #233; 请使用al,zoneid.of(America/montreal )。

我想补充一点,关于Java.timeapioracle.com/tech network/articles/Java/hellip的介绍有一篇很棒的文章;

顺便说一下,我要给读者另一个注意事项。 也可以得到Month枚举对象,而不仅仅是整数。 Month m=localDate.gotMonth (; 请参阅LocalDate:getMonth方法。 通过使用这些对象,可以自行记录代码,确保类型的安全性,并保证有效值。 请参阅Oracle的枚举教程。

如果使用的是date.toInstant (),正好是Java.SQL.date (Java.util.date的子代),请获取UnsupportedOperationException。 newJava.SQL.date(src.gettime ) ) ).toLocalDate )

@Adam可以通过使用添加到旧类中的新转换方法更轻松地转换为

java.sql.Date /从java.sql.Date转换。 java.sql.Date.valueOf( myLocalDate )和myJavaSqlDate.toLocalDate()此外,为JDBC 4.2或更高版本更新的JDBC驱动程序不再需要java.sql类型,并且可以通过ResultSet::getObject和PreparedStatement::setObject方法直接寻址java.time类型。

很高兴知道JDBC 4.2并且我同意你的意见,但是关于UnsupportedOperationException的警告适用,除非你绝对确定在使用java.util.Date::toInstant时不会传递java.sql.Date。 当他们写java.sql.Date时,执行不力,恕我直言。

如果你使用Java 8 date api,你可以直接把它放在一行!

LocalDate today = LocalDate.now();

int month = today.getMonthValue();

勤劳的指甲油时间

或者,使用Joda-Time DateTime类。

//convert date to datetime

DateTime datetime = new DateTime(date);

int month = Integer.parseInt(datetime.toString("MM"))

…要么…

int month = dateTime.getMonthOfYear();

更简单,只需要问DateTime对象的月份。 int month = dateTime.getMonthOfYear();

好的电话巴兹尔,我已经更新了代码。但是,我喜欢.toString("MM"),因为它表明除了"MM"之外还有更多的可能性。

这个答案忽略了时区的关键问题。请参阅我对问题和兄弟答案的评论。我建议将DateTimeZone对象传递给该DateTime构造函数:DateTimeZone.forID("America/Montreal" )。

TL;博士

myUtilDate.toInstant()                          // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC.

.atZone(                              // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object.

ZoneId.of("America/Montreal" )   // Better to specify desired/expected zone explicitly than rely implicitly on the JVM’s current default time zone.

)                                     // Returns a `ZonedDateTime` object.

.getMonthValue()                      // Extract a month number. Returns a `int` number.

java.time详情

Ortomala Lokni对使用java.time的回答是正确的。你应该使用java.time,因为它是对旧的java.util.Date/.Calendar类的巨大改进。请参阅java.time上的Oracle教程。

我将添加一些代码,展示如何使用java.time而不考虑java.util.Date,因为fddxgz开始使用新代码时。

简而言之使用java.time ... Instant是UTC时间轴上的一个时刻。应用时区(ZoneId)以获得ZonedDateTime。

Month类是一个复杂的枚举,代表一般的月份。该枚举有方便的方法,如获取本地化的名称。并且请放心,java.time中的月份数字是理智的,1-12,而不是java.util.Date/.Calendar中的零基础无意义(0-11)。

要获得当前的日期时间,时区至关重要。在任何时候,世界各地的日期都不一样。因此,如果接近月末/月初,那么全世界的月份就不一样了。

ZoneId zoneId = ZoneId.of("America/Montreal" );  // Or 'ZoneOffset.UTC'.

ZonedDateTime now = ZonedDateTime.now( zoneId );

Month month = now.getMonth();

int monthNumber = month.getValue(); // Answer to the Question.

String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date,Calendar和& SimpleDateFormat。

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。

您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

Java SE 8,Java SE 9,Java SE 10及更高版本

内置。

带有捆绑实现的标准Java API的一部分。

Java 9增加了一些小功能和修复。

Java SE 6和Java SE 7

许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport。

Android的

更高版本的Android捆绑java.time类的实现。

对于早期的Android(<26),ThreeTenABP项目采用ThreeTen-Backport(如上所述)。请参见如何使用ThreeTenABP ....

ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。您可以在这里找到一些有用的类,例如Interval,YearWeek,YearQuarter等。

如果你不能使用Joda时间而你仍然生活在黑暗的世界:)(Java 5或更低版本)你可以享受这个:

注意:确保您的日期已经完成,格式为:dd / MM / YYYY

/**

Make an int Month from a date

*/

public static int getMonthInt(Date date) {

SimpleDateFormat dateFormat = new SimpleDateFormat("MM");

return Integer.parseInt(dateFormat.format(date));

}

/**

Make an int Year from a date

*/

public static int getYearInt(Date date) {

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");

return Integer.parseInt(dateFormat.format(date));

}

你是妈妈! /Ε?σαιημ?να!

Date mDate = new Date(System.currentTimeMillis());

mDate.getMonth() + 1

返回值从0开始,因此您应该在结果中添加一个值。

你的回答有两个问题:一个是你可以通过new Date()而不是System.currentTimeMillis来确定当前时间的日期。另一个是不推荐使用getMonth。

@Muhd那么什么是最好的解决方案?

@Muhd我在这里添加的System.currentTimeMillis()表示这是一个long类型,你可以具体说明日期。

Date :: getMonth已在Java 1.1中弃用(cs.mun.ca/~知性的万宝路/java/jdk1.1-beta2-docs/api/…)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。