Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java equivalent of .NET DateTime.MinValue, DateTime.Today

Tags:

Is there a Java equivalent of DateTime.MinValue and DateTime.Today in the Java Date class? Or a way of achieving something similar?

I've realised how spoilt you are with the .NET datetime class, I also need the equivalent of AddDays(), AddMonths().

like image 786
Chris S Avatar asked Oct 23 '10 21:10

Chris S


People also ask

What is the value of DateTime MinValue?

The value of this constant is equivalent to 00:00:00.0000000 UTC, January 1, 0001, in the Gregorian calendar. MinValue defines the date and time that is assigned to an uninitialized DateTime variable.

Does Min work on DateTime?

Min doesn't work because they're dates.


2 Answers

The de-facto Java datetime API is joda-time.

With it, you can get the current date/time by just constructing new DateTime().

Similarly, Without it, you can use Calendar.getInstance() or new Date() to obtain the current date/time.

MinValue can be Calendar.getInstance(0) / new Date(0). This would use the default chronology - i.e. since January 1st, 1970. Since MinValue returns Januar 1st, year 1, you can do that be simply specifying this date, using the appropriate constructor of DateTime.

like image 109
Bozho Avatar answered Oct 18 '22 11:10

Bozho


The other Answers may be correct but use outmoded classes.

java.time

The old date-time classes (java.util.Date/.Calendar etc.) were supplanted by Joda-Time, which in turn has been supplanted by the java.time framework built into Java 8 and later. The java.time classes are inspired by Joda-Time, defined by JSR 310, extended by the ThreeTen-Extra project, back-ported to Java 6 & 7 by the ThreeTen-Backport project, and adapted to Android in the ThreeTenABP project. See Tutorial.

To get the current moment on the timeline in UTC with a resolution of nanoseconds, use Instant.

Instant now = Instant.now();

Instant has three constants:

  • EPOCH1970-01-01T00:00:00Z
  • MIN-1000000000-01-01T00:00Z
  • MAX1000000000-12-31T23:59:59.999999999Z

To get the current moment for an offset-from-UTC, apply a ZoneOffset to get an OffsetDateTime.

OffsetDateTime now = OffsetDateTime.now( ZoneOffset.of( "-04:00" ) );

Better to apply a full time zone (offset plus rules for anomalies such as Daylight Saving Time) if known. Apply a ZoneId to get a ZonedDateTime.

ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );

You can perform arithmetic.

ZonedDateTime dayLater = now.plusDays( 1 );
ZonedDateTime monthLater = now.plusMonths( 1 );

You can get the first moment of a day.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime tomorrowStart = now.toLocalDate().atStartOfDay( zoneId );  // Usually time-of-day of `00:00:00.0` but not always.

If you need only a date without time-of-day and without time zone, use LocalDate. Similarly, LocalTime for time-only without date and without time zone. Usually better to stick with Instant and OffsetDateTime/ZonedDateTime as the Local… types do not represent actual moments on the timeline (no offset or time zone means they are undefined).

LocalDate localDate = LocalDate.now( zoneId );
LocalTime localTime = LocalTime.now( zoneId );
like image 44
Basil Bourque Avatar answered Oct 18 '22 10:10

Basil Bourque