How to get a Date object from year,month and day?

前端 未结 5 1148
孤街浪徒
孤街浪徒 2021-01-23 07:14

When I used the following code, the Date Object was wrong.

Date date = new Date(day.getYear(), day.getMonth(), day.getDay());

Can

相关标签:
5条回答
  • 2021-01-23 07:20

    You can use the Calendar class to achieve this.

    public static void main(String[] args) throws Exception {
        Date date = new Date (115, 7, 5);
        System.out.println("date     = " + date);
    
        Calendar calendar = GregorianCalendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, 5);
        calendar.set(Calendar.MONTH, 7);
        calendar.set(Calendar.YEAR, 2015);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        date = calendar.getTime();
        System.out.println("calendar = " + date);
    
        // or create directly a new clanedar instance
        // thanks Tom to mention this
        calendar = new GregorianCalendar(2015, 7, 5);
        date = calendar.getTime();
        System.out.println("calendar = " + date);
    }
    

    output

    date     = Wed Aug 05 00:00:00 CEST 2015
    calendar = Wed Aug 05 00:00:00 CEST 2015
    calendar = Wed Aug 05 00:00:00 CEST 2015
    
    0 讨论(0)
  • 2021-01-23 07:34

    Without knowing more I'd have to guess but probably you didn't read the JavaDoc on that deprecated constructor:

    year the year minus 1900.
    month the month between 0-11.
    date the day of the month between 1-31.

    As you can see, if you want to create a date for today (Aug 5th 2015) you'd need to use new Date (115, 7, 5);

    If you see that documentation you are free to guess why this is deprecated and should not be used in any new code. :)

    0 讨论(0)
  • 2021-01-23 07:44

    you should use getDate() instead of getDay() method to get the day because getDay() return the day of week not the day of month

    0 讨论(0)
  • 2021-01-23 07:44
    • int getYear() Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.YEAR) - 1900.

    • int getMonth() Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.MONTH).

    • int getDay() Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.DAY_OF_WEEK).

    Hence use :

    Date date = new Date(Calendar.get(Calendar.YEAR) - 1900, Calendar.get(Calendar.MONTH), Calendar.get(Calendar.DAY_OF_WEEK));

    Recomendation : Use Joda-Time

    0 讨论(0)
  • 2021-01-23 07:45

    You can do it with a workaround if you're stuck to Java < 8, but it's very ugly:

    java.util.Date date = new java.text.SimpleDateFormat("dd.MM.yyyy").parse("05.08.2015");
    

    as @Thomas already stated, the default Constructor for date/month/year is deprecated. Probably take a look at this link if you have access to Java8.

    0 讨论(0)
提交回复
热议问题