Unless you explicitly define otherwise, all Java stamps represent UTC time and date since the Unix epoch (Jan 1 1970). If you use System calls (i.e. Android/Google library API calls) then you need to know if these are local or UTC but it's usually easy to tell from the API prototype and, in my experience, is "sufficiently" documented.
I'm working on a project right now which has to mix UTC, GMT and local and all of my stamps are internally presented as milliseconds UTC since the epoch. Only when I display to the user do I take timezones into account. I use the Calendar class exclusively for representing DTGs and for calculations and have found it both accurate and reliable.
I also have a helper class which contains methods such as
long startOfDayUsingPrefs(long millis)
and
long startOfDay(long millis).
The former returns the timestamp for the first tick since midnight today UTC or local time, depending on a preference the user sets (use local timezone or UTC). The latter is always UTC.
Hope this helps..