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

时间:2013-01-09 16:32:36

标签: java calendar

我正在尝试从ToDate将具有上一个日期的日期开始,FromDate将具有当月的第一个日期。对于1月份,它将是1/1/2013,依此类推。如何正确获取当月的第一个日期?我无法做到。

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()));

11 个答案:

答案 0 :(得分:71)

尝试

    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):

import java.time.LocalDate;
LocalDate todaydate = LocalDate.now();
System.out.println("Months first date in yyyy-mm-dd: " +todaydate.withDayOfMonth(1));

答案 1 :(得分:16)

TL;博士

  

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

LocalDate.now()
         .with( TemporalAdjusters.firstDayOfMonth() )

或者...

YearMonth.now().atDay( 1 )

或者...

LocalDate.now().with ( ChronoField.DAY_OF_MONTH , 1 )

java.time

Java 8及更高版本中的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/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId zoneId = ZoneId.of ( "America/Montreal" );
LocalDate today = LocalDate.now ( zoneId );
LocalDate firstOfCurrentMonth = today.with ( ChronoField.DAY_OF_MONTH , 1 );

转储到控制台。

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

LocalDate firstOfCurrentMonth = today.with( TemporalAdjusters.firstDayOfMonth() ) ;

ZonedDateTime

如果您需要一天中的某个时段,请记住,由于夏令时(DST)以及其他可能的异常,00:00:00.000 因此,让java.time确定当天第一时刻的正确时间。

ZonedDateTime zdt = firstOfCurrentMonth.atStartOfDay ( zoneId );
  

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

关于 java.time

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

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 2 :(得分:7)

Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_MONTH, 1);

答案 3 :(得分:2)

Joda时间

如果我正确理解了这个问题,可以使用joda time

轻松完成
LocalDate fromDate = new LocalDate().withDayOfMonth(1);
LocalDate toDate = new LocalDate().minusDays(1);

答案 4 :(得分:1)

如果您还希望将时间设置为0,则代码为:

train

您无需编译即可轻松在线查看: http://www.browxy.com/

答案 5 :(得分:1)

像魅力一样工作!

public static String  getCurrentMonthFirstDate(){
    Calendar c = Calendar.getInstance();   
    c.set(Calendar.DAY_OF_MONTH, 1);
    DateFormat df = new SimpleDateFormat("MM-dd-yyyy");
    //System.out.println(df.format(c.getTime())); 
    return df.format(c.getTime());
}

//更正:输出= 02-01-2018 enter image description here

答案 6 :(得分:1)

您可以使用 java8 中的withDayOfMonth(int dayOfMonth)方法返回每月的第一天:

LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
System.out.println(firstDay);   // 2019-09-01

答案 7 :(得分:1)

import java.util.Date;
import java.text.SimpleDateFormat;

...
Date currentMonth = new Date();
String yyyyMM = new SimpleDateFormat("yyyyMM").format(currentMonth);
Date firstDateOfMonth = new SimpleDateFormat("yyyyMM").parse(yyyyMM);
...
我的愚蠢解决方案。但这对我有用:D

答案 8 :(得分:0)

为了获取日期(以后可以在JPA中使用),我做了

Date startOfMonth = Date.from(LocalDate.now().withDayOfMonth(1).atStartOfDay().toInstant(ZoneOffset.UTC));
  • 我采用当前日期LocalDate.now()
  • 使用DayOfMonth(1)将其移动到每月的第一天
  • 将其移至StartOfDay()的一天中,以摆脱小时和分钟的局面
  • 并通过将“ TimeZone”问题更改为带有“正确” ZoneOffset的Instant来处理TimeZone问题。

答案 9 :(得分:0)

在 Java 8 中你可以使用:

import 'package:baybay_app/Quiz/QuizHome.dart';
import 'package:flutter/material.dart';

class ResultPage extends StatefulWidget {
  int mark;
  ResultPage({Key key, @required this.mark}) : super(key: key);
  @override
  _ResultPageState createState() => _ResultPageState(mark);
}

class _ResultPageState extends State<ResultPage> {
  List<String> images = [
    'assets/excellent.jpg',
    'assets/good.png',
    'assets/Sorry.png'
  ];
  String message;
  String image;
  @override
  void initState(){
    if(mark<5){
      image = images[2];
      message = 'Try Again..\n' + 'You scored $mark';
    }
    else if(mark==5){
      image = images[1];
      message = 'Good.. \n' + 'You scored $mark';
    }
    else{
      image = images[0];
      message =  'Excellent!!!...\n' + 'You scored $mark';
    }
  }
  int mark;
  _ResultPageState(this.mark);
  @override
  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(
        title: Text(
          "Result"
        )
      ),
      body: Column(
        children:[
          Expanded(
            flex: 6,
            child: Material(
              elevation: 5.0,
              child: Container(
                child:Column(
                  children: [
                    Material(
                      child: Container(
                        width: 300.0,
                        height: 300.0,
                        child: ClipRect(
                          child: Image(
                            image: AssetImage(
                              image,
                            )
                          )
                        ),
                      ),
                    ),
                    Center(
                      child: Text(
                        message,
                        style: TextStyle(
                          fontSize: 20.0,
                          fontFamily: 'Staatliches'
                        ),
                      ),
                    )
                  ],
                ),
              ),
            ),
          ),
          Expanded(
            flex:4,
            child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
              children:<Widget>[
               OutlineButton(
                  onPressed: () {
                     Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=> QuizHome(mark:mark)));
                  },
                  child: Text(
                    'Continue',

                    style: TextStyle(
                      fontSize: 20.0,
                      fontFamily: 'Staatliches'
                    )
                  ),
                   padding: EdgeInsets.symmetric(vertical: 10.0,horizontal: 15.0),
                 borderSide: BorderSide(width: 3.0,color: Colors.brown[700])
                )
              ],
            )

          )
        ]
      )
    );
  }
}

答案 10 :(得分:0)

某个日期的月份的第一天:

public static Date firstDayOfMonth(Date d) {
    
    Calendar calendar = new GregorianCalendar();
    calendar.setTime(d);
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    
    return calendar.getTime();  
}