首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取java中当前月份的第一个日期

问获取java中当前月份的第一个日期
EN

Stack Overflow用户
提问于 2013-01-10 00:32:36
回答 11查看 142.9K关注 0票数 53

我正在尝试获取ToDate将具有上一个日期而FromDate将具有当前月份的第一个日期的起始日期。对于一月份,它将是1/1/2013,依此类推。如何正确获取当月的第一个日期?我不能做这件事。

代码语言:javascript
复制
today.add(Calendar.DAY_OF_MONTH, -1);
java.util.Date previousDay=today.getTime();
ToDate = sdfFile1.format(newjava.sql.Date(previousDay.getTime()));
today.add(Calendar.DATE, 1);
java.util.Date nextDay=today.getTime();
FromDate = sdfFile1.format(new java.sql.Date(nextDay.getTime()));
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-01-10 00:37:33

试一试

代码语言:javascript
复制
    Calendar c = Calendar.getInstance();   // this takes current date
    c.set(Calendar.DAY_OF_MONTH, 1);
    System.out.println(c.getTime());       // this returns java.util.Date

更新(Since Java 8):

代码语言:javascript
复制
import java.time.LocalDate;
LocalDate todaydate = LocalDate.now();
System.out.println("Months first date in yyyy-mm-dd: " +todaydate.withDayOfMonth(1));
票数 108
EN

Stack Overflow用户

发布于 2015-11-08 13:11:13

tl;dr

如何正确获取当月的第一个日期?

代码语言:javascript
复制
LocalDate.now()
         .with( TemporalAdjusters.firstDayOfMonth() )

或…

代码语言:javascript
复制
LocalDate.now().withDayOfMonth( 1 )

或…

代码语言:javascript
复制
YearMonth.now().atDay( 1 )

java.time

Java8及更高版本中的java.time框架取代了旧的java.util.Date/.Calendar类。旧的类已经被证明是麻烦的、令人困惑的和有缺陷的。避开他们。

java.time框架的灵感来自非常成功的Joda-Time库,由JSR 310定义,由ThreeTen-Extra项目扩展,并在Tutorial中进行了解释。

LocalDate

对于只有日期而没有时间的值,请使用LocalDate类。虽然LocalDate没有指定的时区,但我们必须指定一个时区才能确定日期,例如“今天”。例如,巴黎的新一天比蒙特雷亚尔更早破晓。

在确定今天的日期时,时区至关重要。在任何给定的时刻,世界各地的日期都会因地区而异。省略时区意味着在确定当前日期时自动应用JVM的当前时区。JVM中的任何代码都可以在运行时更改缺省值,因此您将如履薄冰。最好显式指定所需/预期的时区,而不是隐式依赖当前默认时区。

指定continent/region格式的proper time zone name,如America/Montreal、Africa/Casablanca或Pacific/Auckland。切勿使用3-4个字母的缩写,例如EST或IST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

在代码中,我们首先根据特定时区确定今天的日期。

代码语言:javascript
复制
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
LocalDate today = LocalDate.now ( zoneId );

然后我们将每月的日期调整为1号。

代码语言:javascript
复制
LocalDate firstOfCurrentMonth = today.with ( ChronoField.DAY_OF_MONTH , 1 );

或者更简单地说:

代码语言:javascript
复制
LocalDate firstOfCurrentMonth = today.withDayOfMonth( 1 ) ;

转储到控制台。

代码语言:javascript
复制
System.out.println ( "For zoneId: " + zoneId + " today is: " + today + " and first of this month is " + firstOfCurrentMonth );

zoneId的

:美国/蒙特利尔今天是: 2015-11-08,这个月的第一天是2015-11-01

或者,使用TemporalAdjuster。出于您的目的,您将在TemporalAdjusters类(注意复数s)中找到方便的实现,特别是firstDayOfMonth。

代码语言:javascript
复制
LocalDate firstOfCurrentMonth = today.with( TemporalAdjusters.firstDayOfMonth() ) ;

ZonedDateTime

如果您需要一天中的某个时间,请记住,由于夏令时和其他可能的异常情况,00:00:00.000并不总是一天中的第一个时刻。因此,让java.time确定一天中第一个时刻的正确时间。

代码语言:javascript
复制
ZonedDateTime zdt = firstOfCurrentMonth.atStartOfDay ( zoneId );

2015-11-01T00:00-04:00美国/蒙特利尔

关于java.time

框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date、Calendar和SimpleDateFormat。

现在在maintenance mode中的项目建议迁移到java.time类。

要了解更多信息,请参阅。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310。

从哪里获取java.time类?

  • ,Backport,以及捆绑了implementation.
  • Java 9的标准Java API的later
  • Built-in.
  • Part添加了一些次要功能,在.
  • Later版本的捆绑实现的java.time类中,java.time功能的fixes.
  • 和
  • Much被向后移植到Java6和7。
  • 对于早期的安卓,项目适应了ThreeTen-Backport (如上所述)。请参阅.

项目使用额外的类扩展了java.time。这个项目是未来可能添加到java.time中的试验场。您可能会在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和more。

票数 24
EN

Stack Overflow用户

发布于 2013-01-10 00:37:47

代码语言:javascript
复制
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_MONTH, 1);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14241836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档