如何从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);

int month = 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(Java 8)

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

Date date = new Date();

LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

int month = localDate.getMonthValue();

请注意,月份值在这里给出1到12,与adarshr的答案中的cal.get(Calendar.MONTH)相反,给出0到11之间的值。

但正如Basil Bourque在评论中所说,首选方法是使用LocalDate::getMonth方法获取Month枚举对象。

好答案。读者注意:您可能需要指定时区而不是依赖于答案中显示的默认呼叫。比起Montré al,新的一天(和一个月)早些时候在巴黎开始了。如果您特别关注Montré al,请使用ZoneId.of("America/Montreal" )。

我只想补充一点,关于java.time api oracle.com/technetwork/articles/java/&hellip的介绍有一篇很棒的文章;

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

如果您使用date.toInstant()并且您恰好使用java.sql.Date(java.util.Date的子项),那么您将获得UnsupportedOperationException。 试试new java.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,因为当你开始使用新代码时。

简而言之使用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/~michael/java/jdk1.1-beta2-docs/api/…)

java中date如何获取月份_Java:从Date获取月份整数相关推荐

  1. java正则获取数字_Java通过正则表达式获取字符串中数字的方法示例

    前言 本文通过一个小范例来学习java中通过正则表达式如何获得一个字符串中的数字,下面话不多说,来看看详细的介绍吧. 示例代码如下: import java.util.regex.Matcher; i ...

  2. java中日期格式的转换_java中定义日期格式的转换符

    Hi,大家好久不见,今天我们在这里给大家介绍一下关于Java的小知识,在Java中定义日期格式的转换符,至于运用呢就不和大家做介绍了:接下来就给大家详细介绍一下如何实现. 那我们该如何创建使用呢?首先 ...

  3. java中日历类的用法_java日期类的用法

    java日期类的用法 不管你是处理财务交易还是计划着下一步的行动,你都要知道怎样在Java中建立,使用和显示日期.这需要你简单的查阅一下相应类的API参考:一个日期可以创建3个相关类的对象.这篇文章告 ...

  4. java用date加一个小时_在Java中添加n个小时到一个date?

    检查日历类. 它有add方法(和其他一些),以允许时间操纵. 像这样的东西应该工作. Calendar cal = Calendar.getInstance(); // creates calenda ...

  5. Java中输出时区的缩写_Java中的时区转换小结

    时间加减 Date currentDate = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); ...

  6. java中正则匹配字符串长度_Java中使用正则表达式校验字符串

    Java中使用正则表达式校验字符串 正则表达式是某一位伟大的数学家发明的,现在已经形成了一个ISO标准,这个标准和编程语言没有关系.至于具体谁发明的,怎么发明的,我也忘记了:). 正则表达式简单理解就 ...

  7. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  8. java中用于选择按钮的语句_java程序员考试套题1

    Java练习一 一.选择题 1.在Java中,下列()方法可以把JFrame对象jFrame的布局管理器设为FlowLayout 类型. A.jFrame.setLayout(new FlowLayo ...

  9. java中集合的模型特点_Java 学习笔记(十四)集合

    集合 在开发的时候,如果需要存储多个数据,可以使用数组,不过数据是固定长度的,如果需要存储可变长度的多个数据,可以使用集合.集合提供存储空间可变的存储类型,存储的容量可以实时改变 集合分类 Colle ...

  10. java中属性文件读取案例_java相关:Spring中属性文件properties的读取与使用详解

    java相关:Spring中属性文件properties的读取与使用详解 发布于 2020-6-3| 复制链接 摘记: Spring中属性文件properties的读取与使用详解实际项目中,通常将一些 ...

最新文章

  1. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...
  2. centos架设lamp环境 php+mysql+httpd+vsftp
  3. php sql注入 替换,通过替换单引号来防止SQL注入
  4. 考公务员的本科学历可以考吗
  5. cnil在python_在Python中使用cumprod()计算权益曲线
  6. linux服务器时间乱码问题解决
  7. poj1163 数字三角形 (动态规划)
  8. android调用python模块 chaquo_小猿圈python学习-系统调用os模块
  9. EFCore 迁移
  10. MySQL数据库(七)
  11. 头的各个部位示意图_人体头部结构图解剖图 人体头部结构及功能
  12. 微信公众号吸粉软件助你快速增加粉丝数和文章阅读量!
  13. SVN中clean up的含义
  14. iOS-边框图片,头像边框
  15. python图片旋转脚本_Python实现PS滤镜的旋转模糊功能示例
  16. 氮化硼修饰导热复合物和碳纤维氮化硼涂层|六方氮化硼修饰石墨化氮化碳复合光催化剂|六方氮化硼(h-BN)修饰玻碳电极(GCE-BN) 氮化物
  17. 一招解决python pip install 安装库失败
  18. 数字角频率和模拟角频率和物理频率和归一化角频率的关系,及FFT频率和实际物理频率的关系分析
  19. python CH340单片机通迅
  20. android SDK-25事件分发机制--源码正确解析

热门文章

  1. SpringBoot + Spark on Yan踩坑记
  2. 【图论专题二】【网络流部分】狼和羊的故事
  3. 联合办公空间会员需要保险吗?
  4. android log4j2,Log4j2最佳实践
  5. Agora声网-Uniapp拉流(Vue拉流)
  6. UE4实现生化危机7影子谜题
  7. 智能安防是趋势 几大重点领域深入探讨
  8. Baxter官网资料(查)
  9. Qt完整工程创建和项目文件概述
  10. Ruff Chain韩国Meetup回顾:物联网因区块链而改变