Iterate through date ranges without using libraries - Java - java

Hi I want to iterate through a date range without using any libraries. I want to start on 18/01/2005(want to format it to yyyy/M/d) and iterate in day intervals until the current date. I have formatted the start date, but I dont know how I can add it to a calendar object and iterate. I was wondering if anyone can help. Thanks
String newstr = "2005/01/18";
SimpleDateFormat format1 = new SimpleDateFormat("yyyy/M/d");

Date date = format1.parse(newstr);
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
while (someCondition(calendar)) {
doSomethingWithTheCalendar(calendar);
calendar.add(Calendar.DATE, 1);
}

Use SimpleDateFormat to parse a string into a Date object or format a Date object into a string.
Use class Calendar for date arithmetic. It has an add method to advance the calendar, for example with a day.
See the API documentation of the classes mentioned above.
Alternatively, use the Joda Time library, which makes these things easier. (The Date and Calendar classes in the standard Java API have a number of design issues and are not as powerful as Joda Time).

Related

JDatePicker Date difference in Java

I created a GUI with several JDatePicker objects. Now I’m trying to compute the difference between two JDatePicker dates. But I don’t have a clue how to start. Can anyone help me please?
The date in the JDatePicker is a String object. I guess I need to convert the String into a date object and then convert it to a long object. Am I on the right path?
Locale.setDefault(Locale.UK); // So that other readers can run the example; don’t include in your production code
DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
String dateString1FromJDatePicker = "24 November 2019";
String dateString2FromJDatePicker = "29 February 2020";
LocalDate from = LocalDate.parse(dateString1FromJDatePicker, dateFormatter);
LocalDate to = LocalDate.parse(dateString2FromJDatePicker, dateFormatter);
long difference = ChronoUnit.DAYS.between(from, to);
System.out.println(difference);
Output from this example piece of code is:
97
It takes two steps:
Parse each date string into a LocalDate.
Use ChronoUnit.DAYS.between() for obtaining the difference in days between the two dates.
As a possibly better alternative you may look for a date picker component that has integration with java.time, the modern Java date and time API, so that you don’t need to parse the string yourself.
Links
SourceForge JDatePicker.
Oracle tutorial: Date Time explaining how to use java.time.

Date and Time Format/Patterns in java / SimpleDateFormat class

I'm trying to format a date using the method where dd-mm-YYYY is an example date
Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(displayDate*1000);
String date = DateFormat.format("dd-mm-YYYY", cal).toString();
I'm looking for a list of characters I can use, similar to this in PHP, to format my date how I want. Is there a list anywhere around I can use? The format I'm after is 26th April, 2006, but a list would be good so I could bookmark it for reference later on.
The JavaDoc of SimpleDateFormat does contain such a list.
Yes, it's in the javadoc for SimpleDateFormat:
http://docs.oracle.com/javase/7/docs/api/

Update time only

Is there any way to update only a Date's time path?
I tried Date.setTime() but it replaces the date path too. I there any java method or the only way is to set hour, minute, second and milisecond?
Thank you
A Java Date is just a wrapper around a long that counts time from the epoch (January 1, 1970). Much more flexible is Calendar. You can create a Calendar from a Date:
Date date = . . .;
Calendar cal = new GregorianCalendar();
cal.setTime(date);
Then you can set various fields of the Calendar:
cal.set(Calendar.HOUR_OF_DAY, 8);
// etc.
I would start by moving away from java.util.Date entirely. Ideally, use Joda Time as it's a far more capable date/time library.
Otherwise, you should use java.util.Calendar. A java.util.Date doesn't have a particular date/time until you decide what time zone you're interested in - it just represents an instant in time, which different people around the world will consider to be a different date and time of day.
You'll want to take a look at java.util.Calender.
It will allow you to change the individual parts of the date/time.
Calendar cal = Calender.getInstance();
cal.setTime(date);
cal.set(Calender.HOUR, hour);
Alternatively, as has already being suggested, I'd take a look at Joda Time

java - how to compare same days in date

I have a long data member that represents a date.
I cast it to a
Date d = new Date(long);
I want to now if a nother date has the same day.
How do I do it?
Thanks.
(For andrew)
Edit :
Found this solution
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
return fmt.format(date1).equals(fmt.format(date2));
in here
Comparing two java.util.Dates to see if they are in the same day
looks nice
use the joda api.
http://joda-time.sourceforge.net/
Its a lot easier and better than the Calendar object route in java jdk
Well you can convert them both to calendar Objects and get the calendar objects day and compare that way.
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(LONG VALUE HERE);
int day = cal.get(Calendar.DAY_OF_MONTH);
Do the same thing with the other date, and compare the values.
edit: By the way, you are not casting the long to a date, you are just creating a Date object using a long.
Use apache commons.
DateUtils.isSameDay(date1, date2);
To see if the dates are equal:
date_one.equals(date_two);
To see if just the day is equal, I usually chop the time off the date (setHours(0), setMinutes(0), etc.) and then use the .equals() method.
Use java.util.Calendar for all comparison operations.

java/android datetime timespan

If i have a simpledateformat object:
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
And have two times, 12:12 and 13:13 for example, is there an easy way to check if the current time is between the two SimpleDateFormats (The clock is 12:15 for example)? Thanks
DateFormat newDateFormat = new SimpleDateFormat("HH:mm");
Date d1 = newDateFormat.parse("12:12");
Date d2 = newDateFormat.parse("13:13");
Date myDate = newDateFormat.parse("12:15");
if(myDate.getTime() >= d1.getTime() && myDate.getTime() <= d2.getTime()){
//yes it is in between including border
}
Compare them using Date or Calendar objects, SimpleDateFormat is just a representation. You can use format.parse("12:12") and ir returns a Date object representing that time.
If anyone is looking for a better and lighter library to use in Android/ Java that handles interval better, you can use a library that a wrote to use in my own Android app. https://github.com/ashokgelal/samaya
Also, see this question: Do we have a TimeSpan sort of class in Java

Categories

Resources