Does this account for daylight savings?

// someTime is epoch in millis (UTC)

final long timeNow = new Date().getTime();
final long midnight = timeNow - timeNow % (3600 * 24 * 1000L);
final long yesterdayMidnight = midnight - (3600 * 24 * 1000L);


// check if same day.
if (someTime >= midnight)
   // do something

// check if yesterday
if (someTime >= yesterdayMidnight)

Edited: My purpose is to check whether someTime is in the same day or in the previous day without doing too much heavyweight stuff.

Does this account for day light savings and why? If not, what's the simplest logic?

Jon Skeet
people
quotationmark

Your current code doesn't do anything with the local time zone - everything is in UTC, effectively (certainly in terms of your code, which is dealing in "milliseconds since the Unix epoch").

If you want to make your code time-zone-sensitive, you should use (in order of preference):

Use higher-level abstractions where possible - your code should do as little low-level manipulation of time as possible.

EDIT: Now that we know the purpose, here's an example implementation in Joda Time:

public void calculate(Instant now, Instant then, DateTimeZone zone) {
    LocalDate today = new LocalDate(now, zone);
    LocalDate otherDay = new LocalDate(then, zone);
    if (otherDay.equals(today)) {
        // Today day
    } else if (otherDay.equals(today.minusDays(1)) {
        // Yesterday
    } else {
        // Neither today nor yesterday
    }
}

Note how there's nothing low level here - we're just working out which date each value (now and then) falls in within the given time zone, and then comparing those.

people

See more on this question at Stackoverflow