Serg
Serg

Reputation: 14118

How to get previous date in java

I have a String Object in format yyyyMMdd.Is there a simple way to get a String with previous date in the same format? Thanks

Upvotes: 16

Views: 120571

Answers (11)

Manpreet Singh
Manpreet Singh

Reputation: 75

In Java 8 we can use directly for this purpose

LocalDate todayDate = LocalDate.now();

By default it provide the format of 2021-06-07, with the help of formater we can change this also

LocalDate previousDate = todayDate.minusDays(5);

Upvotes: -1

narendra-choudhary
narendra-choudhary

Reputation: 4826

This is an old question, and most existing answers pre-date Java 8. Hence, adding this answer for Java 8+ users.


Java 8 introduced new APIs for Date and Time to replace poorly designed, and difficult to use java.util.Date and java.util.Calendar classes.

To deal with dates without time zones, LocalDate class can be used.

String dateString = "20200301";

// BASIC_ISO_DATE is "YYYYMMDD"
// See below link to docs for details
LocalDate date = LocalDate.parse(dateString, DateTimeFormatter.BASIC_ISO_DATE);

// get date for previous day
LocalDate previousDate = date.minusDays(1);

System.out.println(previousDate.format(DateTimeFormatter.BASIC_ISO_DATE));
// prints 20200229

Docs:

Upvotes: 7

kameshkr258
kameshkr258

Reputation: 1

you can create a generic method which takes

   - Date (String)  (current date or from date),
   - Format (String) (your desired fromat) and
   - Days (number of days before(-ve value) or after(+ve value))

as input and return your desired date in required format.

following method can resolve this problem.

public String getRequiredDate(String date , String format ,int days){
        try{
         final Calendar cal = Calendar.getInstance();
            cal.setTime(new SimpleDateFormat(format).parse(date));
            cal.add(Calendar.DATE, days);
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            date = sdf.format(cal.getTime());
        }
        catch(Exception ex){
            logger.error(ex.getMessage(), ex);
        }
        return date;
    }
}

Upvotes: 0

Basil Bourque
Basil Bourque

Reputation: 340098

If you are willing to use the 3rd-party utility, Joda-Time, here is some example code using Joda-Time 2.3 on Java 7. Takes just two lines.

String dateAsString = "20130101";
org.joda.time.LocalDate someDay =  org.joda.time.LocalDate.parse(dateAsString, org.joda.time.format.DateTimeFormat.forPattern("yyyymmdd"));
org.joda.time.LocalDate dayBefore = someDay.minusDays(1);

See the results:

System.out.println("someDay: " + someDay );
System.out.println("dayBefore: " + dayBefore );

When run:

someDay: 2013-01-01
dayBefore: 2012-12-31

This code assumes you have no time zone. Lacking a time zone is rarely a good thing, but if that's your case, that code may work for you. If you do have a time zone, use a DateTime object instead of LocalDate.

About that example code and about Joda-Time…

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

// Joda-Time - The popular alternative to Sun/Oracle's notoriously bad date, time, and calendar classes bundled with Java 7 and earlier.
// http://www.joda.org/joda-time/

// Joda-Time will become outmoded by the JSR 310 Date and Time API introduced in Java 8.
// JSR 310 was inspired by Joda-Time but is not directly based on it.
// http://jcp.org/en/jsr/detail?id=310

// By default, Joda-Time produces strings in the standard ISO 8601 format.
// https://en.wikipedia.org/wiki/ISO_8601

Upvotes: 0

Pratik Butani
Pratik Butani

Reputation: 62419

You can use:

    Calendar cal  = Calendar.getInstance();
    //subtracting a day
    cal.add(Calendar.DATE, -1);

    SimpleDateFormat s = new SimpleDateFormat("yyyyMMdd");
    String result = s.format(new Date(cal.getTimeInMillis()));

Upvotes: 14

shah sanket
shah sanket

Reputation: 267

Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.YEAR, -1);
Date dt2 = new Date(cal2.getTimeInMillis());
System.out.println(dt2);

Upvotes: -3

kalyan
kalyan

Reputation: 21

HI,

I want to get 20 days previous, to current date,

 Calendar cal = Calendar.getInstance();
    Calendar xdate = (Calendar)cal.clone();
xdate.set(Calendar.DAY_OF_YEAR, - 20);

System.out.println(" Current Time "+ cal.getTime().toString());
System.out.println(" X Time "+ xdate.getTime().toString());

I had some UN Expected result, When i tried on Jan 11th,

Current Time Tue Jan 11 12:32:16 IST 2011 X Time Sat Dec 11 12:32:16 IST 2010

Calendar cal = Calendar.getInstance();
Calendar xdate = (Calendar)cal.clone();
xdate.set(Calendar.DAY_OF_YEAR,cal.getTime().getDate() - 20 );

System.out.println(" Current Time "+ cal.getTime().toString());
System.out.println(" X Time "+ xdate.getTime().toString());

This code solved my Problem.

Upvotes: 2

vkraemer
vkraemer

Reputation: 9902

I would rewrite these answers a bit.

You can use

        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

        // Get a Date object from the date string
        Date myDate = dateFormat.parse(dateString);

        // this calculation may skip a day (Standard-to-Daylight switch)...
        //oneDayBefore = new Date(myDate.getTime() - (24 * 3600000));

        // if the Date->time xform always places the time as YYYYMMDD 00:00:00
        //   this will be safer.
        oneDayBefore = new Date(myDate.getTime() - 2);

        String result = dateFormat.format(oneDayBefore);

To get the same results as those that are being computed by using Calendar.

Upvotes: 18

William Brendel
William Brendel

Reputation: 32207

Here is how to do it without Joda Time:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Main {

    public static String previousDateString(String dateString) 
            throws ParseException {
        // Create a date formatter using your format string
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

        // Parse the given date string into a Date object.
        // Note: This can throw a ParseException.
        Date myDate = dateFormat.parse(dateString);

        // Use the Calendar class to subtract one day
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(myDate);
        calendar.add(Calendar.DAY_OF_YEAR, -1);

        // Use the date formatter to produce a formatted date string
        Date previousDate = calendar.getTime();
        String result = dateFormat.format(previousDate);

        return result;
    }

    public static void main(String[] args) {
        String dateString = "20100316";

        try {
            // This will print 20100315
            System.out.println(previousDateString(dateString));
        } catch (ParseException e) {
            System.out.println("Invalid date string");
            e.printStackTrace();
        }
    }
}

Upvotes: 17

brabster
brabster

Reputation: 43600

It's much harder than it should be in Java without library support.

You can parse the given String into a Date object using an instance of the SimpleDateFormat class.

Then you can use Calendar's add() to subtract one day.

Then you can use SimpleDateFormat's format() to get the formatted date as a String.

The Joda Time library a much easier API.

Upvotes: 6

use SimpleDateFormat to parse the String to Date, then subtract one day. after that convert the date to String again.

Upvotes: 4

Related Questions