Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Date and Calendat.getTime() not the same exact freaking thing?

Reply
Thread Tools

Date and Calendat.getTime() not the same exact freaking thing?

 
 
lbrtchx@gmail.com
Guest
Posts: n/a
 
      04-08-2008
Hi,
~
I am parsing some data from archived files out of Unix file system
listings
~
The thing is that I decided to store the date as a long since the
Epoch, so that people from any locales can see it accordingly by a
simple reformatting on the fly
~
But, when I parse the date data, such as "Nov 10 2003" and build a
Calendar Object:
~
System.out.println("// __ aYr: |" + aYr + "|");
System.out.println("// __ aMonth: |" + aMonth + "|");
System.out.println("// __ aDayOfMonth: |" + aDayOfMonth + "|");
// __
try{
int iYr = Integer.parseInt(aYr);
int iMnth = HMKMIx.get(aMonth.toUpperCase());
int iDay = Integer.parseInt(aDayOfMonth);
System.out.println("// __ |" + iYr + "|" + iMnth + "|" + iDay + "|");
// __
Calendar Kal = Calendar.getInstance();
Kal.set(Calendar.YEAR, iYr);
Kal.set(Calendar.MONTH, iMnth);
Kal.set(Calendar.DAY_OF_MONTH, iDay);
// __ http://java.sun.com/javase/6/docs/ap...ndar.html#time
Date Dt = Kal.getTime();
System.out.println("// __ Dt: |" + Dt + "|");
lTm = Dt.getTime();
System.out.println("// __ lTm: |" + lTm + "|");
// __
}catch(NumberFormatException NFX){
~
using:
~
HMKMIx = new HashMap<String, Integer>();
HMKMIx.put("JAN", Calendar.JANUARY);
HMKMIx.put("FEB", Calendar.FEBRUARY);
HMKMIx.put("MAR", Calendar.MARCH);
HMKMIx.put("APR", Calendar.APRIL);
HMKMIx.put("MAY", Calendar.MAY);
HMKMIx.put("JUN", Calendar.JUNE);
HMKMIx.put("JUL", Calendar.JULY);
HMKMIx.put("AUG", Calendar.AUGUST);
HMKMIx.put("SEP", Calendar.SEPTEMBER);
HMKMIx.put("OCT", Calendar.OCTOBER);
HMKMIx.put("NOV", Calendar.NOVEMBER);
HMKMIx.put("DEC", Calendar.DECEMBER);
~
I am getting inconsistent results
~
// __ |-rw-rw-r-- 1 gbnewby pg 113214 Nov 10 2003 10002.zip|
1/0/0/0/10002|
// __ aYr: |2003|
// __ aMonth: |Nov|
// __ aDayOfMonth: |10|
// __ |2003|10|10|
// __ Dt: |Mon Nov 10 04:46:19 EST 2003|
// __ lTm: |1068457579812|
// __ |10002.zip|1/0/0/0/10002|113214|gbnewby|pg|-rw-rw-r--|
1068457579812|
~
// __ |-rw-rw-r-- 1 gbnewby pg 145317 Nov 10 2003 10003.zip|
1/0/0/0/10003|
// __ aYr: |2003|
// __ aMonth: |Nov|
// __ aDayOfMonth: |10|
// __ |2003|10|10|
// __ Dt: |Mon Nov 10 04:46:19 EST 2003|
// __ lTm: |1068457579814|
// __ |10003.zip|1/0/0/0/10003|145317|gbnewby|pg|-rw-rw-r--|
1068457579814|
~
// __ |-rw-rw-r-- 1 gbnewby pg 120858 Nov 10 2003 10004.zip|
1/0/0/0/10004|
// __ aYr: |2003|
// __ aMonth: |Nov|
// __ aDayOfMonth: |10|
// __ |2003|10|10|
// __ Dt: |Mon Nov 10 04:46:19 EST 2003|
// __ lTm: |1068457579818|
// __ |10004.zip|1/0/0/0/10004|120858|gbnewby|pg|-rw-rw-r--|
1068457579818|
~
I am using a Date object in order to get the time in millis because
the calendar class doesn't give ti to you directly
~
Why on earth is that happening? Even if they are just a few
milliseconds apart it should not be happening?
~
Is it possibly, obviously a bug or another homely and unspecified
semantics from java's date/calendar/time handling?
~
Thanks
lbrtchx
 
Reply With Quote
 
 
 
 
Bobby Quinne
Guest
Posts: n/a
 
      04-08-2008
Have a look at java.text.SimpleDateFomat. You should be able to get
the Date into the desired output format

lbrt...@gmail.com wrote:
> Hi,
> ~
> I am parsing some data from archived files out of Unix file system
> listings
> ~
> The thing is that I decided to store the date as a long since the
> Epoch, so that people from any locales can see it accordingly by a
> simple reformatting on the fly
> ~
> But, when I parse the date data, such as "Nov 10 2003" and build a
> Calendar Object:
> ~
> System.out.println("// __ aYr: |" + aYr + "|");
> System.out.println("// __ aMonth: |" + aMonth + "|");
> System.out.println("// __ aDayOfMonth: |" + aDayOfMonth + "|");
> // __
> try{
> int iYr = Integer.parseInt(aYr);
> int iMnth = HMKMIx.get(aMonth.toUpperCase());
> int iDay = Integer.parseInt(aDayOfMonth);
> System.out.println("// __ |" + iYr + "|" + iMnth + "|" + iDay + "|");
> // __
> Calendar Kal = Calendar.getInstance();
> Kal.set(Calendar.YEAR, iYr);
> Kal.set(Calendar.MONTH, iMnth);
> Kal.set(Calendar.DAY_OF_MONTH, iDay);
> // __ http://java.sun.com/javase/6/docs/ap...ndar.html#time
> Date Dt = Kal.getTime();
> System.out.println("// __ Dt: |" + Dt + "|");
> lTm = Dt.getTime();
> System.out.println("// __ lTm: |" + lTm + "|");
> // __
> }catch(NumberFormatException NFX){
> ~
> using:
> ~
> HMKMIx = new HashMap<String, Integer>();
> HMKMIx.put("JAN", Calendar.JANUARY);
> HMKMIx.put("FEB", Calendar.FEBRUARY);
> HMKMIx.put("MAR", Calendar.MARCH);
> HMKMIx.put("APR", Calendar.APRIL);
> HMKMIx.put("MAY", Calendar.MAY);
> HMKMIx.put("JUN", Calendar.JUNE);
> HMKMIx.put("JUL", Calendar.JULY);
> HMKMIx.put("AUG", Calendar.AUGUST);
> HMKMIx.put("SEP", Calendar.SEPTEMBER);
> HMKMIx.put("OCT", Calendar.OCTOBER);
> HMKMIx.put("NOV", Calendar.NOVEMBER);
> HMKMIx.put("DEC", Calendar.DECEMBER);
> ~
> I am getting inconsistent results
> ~
> // __ |-rw-rw-r-- 1 gbnewby pg 113214 Nov 10 2003 10002.zip|
> 1/0/0/0/10002|
> // __ aYr: |2003|
> // __ aMonth: |Nov|
> // __ aDayOfMonth: |10|
> // __ |2003|10|10|
> // __ Dt: |Mon Nov 10 04:46:19 EST 2003|
> // __ lTm: |1068457579812|
> // __ |10002.zip|1/0/0/0/10002|113214|gbnewby|pg|-rw-rw-r--|
> 1068457579812|
> ~
> // __ |-rw-rw-r-- 1 gbnewby pg 145317 Nov 10 2003 10003.zip|
> 1/0/0/0/10003|
> // __ aYr: |2003|
> // __ aMonth: |Nov|
> // __ aDayOfMonth: |10|
> // __ |2003|10|10|
> // __ Dt: |Mon Nov 10 04:46:19 EST 2003|
> // __ lTm: |1068457579814|
> // __ |10003.zip|1/0/0/0/10003|145317|gbnewby|pg|-rw-rw-r--|
> 1068457579814|
> ~
> // __ |-rw-rw-r-- 1 gbnewby pg 120858 Nov 10 2003 10004.zip|
> 1/0/0/0/10004|
> // __ aYr: |2003|
> // __ aMonth: |Nov|
> // __ aDayOfMonth: |10|
> // __ |2003|10|10|
> // __ Dt: |Mon Nov 10 04:46:19 EST 2003|
> // __ lTm: |1068457579818|
> // __ |10004.zip|1/0/0/0/10004|120858|gbnewby|pg|-rw-rw-r--|
> 1068457579818|
> ~
> I am using a Date object in order to get the time in millis because
> the calendar class doesn't give ti to you directly
> ~
> Why on earth is that happening? Even if they are just a few
> milliseconds apart it should not be happening?
> ~
> Is it possibly, obviously a bug or another homely and unspecified
> semantics from java's date/calendar/time handling?
> ~
> Thanks
> lbrtchx

 
Reply With Quote
 
 
 
 
GArlington
Guest
Posts: n/a
 
      04-08-2008
On Apr 8, 10:06 am, lbrt...@gmail.com wrote:
> Hi,
> ~
> I am parsing some data from archived files out of Unix file system
> listings
> ~
> The thing is that I decided to store the date as a long since the
> Epoch, so that people from any locales can see it accordingly by a
> simple reformatting on the fly
> ~
> But, when I parse the date data, such as "Nov 10 2003" and build a
> Calendar Object:
> ~
> System.out.println("// __ aYr: |" + aYr + "|");
> System.out.println("// __ aMonth: |" + aMonth + "|");
> System.out.println("// __ aDayOfMonth: |" + aDayOfMonth + "|");
> // __
> try{
> int iYr = Integer.parseInt(aYr);
> int iMnth = HMKMIx.get(aMonth.toUpperCase());
> int iDay = Integer.parseInt(aDayOfMonth);
> System.out.println("// __ |" + iYr + "|" + iMnth + "|" + iDay + "|");
> // __
> Calendar Kal = Calendar.getInstance();
> Kal.set(Calendar.YEAR, iYr);
> Kal.set(Calendar.MONTH, iMnth);
> Kal.set(Calendar.DAY_OF_MONTH, iDay);
> // __http://java.sun.com/javase/6/docs/api/java/util/Calendar.html#time
> Date Dt = Kal.getTime();
> System.out.println("// __ Dt: |" + Dt + "|");
> lTm = Dt.getTime();
> System.out.println("// __ lTm: |" + lTm + "|");
> // __
> }catch(NumberFormatException NFX){
> ~
> using:
> ~
> HMKMIx = new HashMap<String, Integer>();
> HMKMIx.put("JAN", Calendar.JANUARY);
> HMKMIx.put("FEB", Calendar.FEBRUARY);
> HMKMIx.put("MAR", Calendar.MARCH);
> HMKMIx.put("APR", Calendar.APRIL);
> HMKMIx.put("MAY", Calendar.MAY);
> HMKMIx.put("JUN", Calendar.JUNE);
> HMKMIx.put("JUL", Calendar.JULY);
> HMKMIx.put("AUG", Calendar.AUGUST);
> HMKMIx.put("SEP", Calendar.SEPTEMBER);
> HMKMIx.put("OCT", Calendar.OCTOBER);
> HMKMIx.put("NOV", Calendar.NOVEMBER);
> HMKMIx.put("DEC", Calendar.DECEMBER);
> ~
> I am getting inconsistent results
> ~
> // __ |-rw-rw-r-- 1 gbnewby pg 113214 Nov 10 2003 10002.zip|
> 1/0/0/0/10002|
> // __ aYr: |2003|
> // __ aMonth: |Nov|
> // __ aDayOfMonth: |10|
> // __ |2003|10|10|
> // __ Dt: |Mon Nov 10 04:46:19 EST 2003|
> // __ lTm: |1068457579812|
> // __ |10002.zip|1/0/0/0/10002|113214|gbnewby|pg|-rw-rw-r--|
> 1068457579812|
> ~
> // __ |-rw-rw-r-- 1 gbnewby pg 145317 Nov 10 2003 10003.zip|
> 1/0/0/0/10003|
> // __ aYr: |2003|
> // __ aMonth: |Nov|
> // __ aDayOfMonth: |10|
> // __ |2003|10|10|
> // __ Dt: |Mon Nov 10 04:46:19 EST 2003|
> // __ lTm: |1068457579814|
> // __ |10003.zip|1/0/0/0/10003|145317|gbnewby|pg|-rw-rw-r--|
> 1068457579814|
> ~
> // __ |-rw-rw-r-- 1 gbnewby pg 120858 Nov 10 2003 10004.zip|
> 1/0/0/0/10004|
> // __ aYr: |2003|
> // __ aMonth: |Nov|
> // __ aDayOfMonth: |10|
> // __ |2003|10|10|
> // __ Dt: |Mon Nov 10 04:46:19 EST 2003|
> // __ lTm: |1068457579818|
> // __ |10004.zip|1/0/0/0/10004|120858|gbnewby|pg|-rw-rw-r--|
> 1068457579818|
> ~
> I am using a Date object in order to get the time in millis because
> the calendar class doesn't give ti to you directly
> ~
> Why on earth is that happening? Even if they are just a few
> milliseconds apart it should not be happening?
> ~
> Is it possibly, obviously a bug or another homely and unspecified
> semantics from java's date/calendar/time handling?
> ~
> Thanks
> lbrtchx


I am not sure what is your complaint about?
You create new instance of Calendar object (it is inited by default
with CURRENT date/time [incl ms]), then you set a DATE, BUT do not
change the time, and then you complain that three separate objects are
different???
They were NOT created at the same moment of time -> so they are bound
to be different...
 
Reply With Quote
 
Alan Krueger
Guest
Posts: n/a
 
      04-08-2008
On Apr 8, 4:06 am, lbrt...@gmail.com wrote:
> I am using a Date object in order to get the time in millis because
> the calendar class doesn't give ti to you directly
> ~
> Why on earth is that happening? Even if they are just a few
> milliseconds apart it should not be happening?


Did you read the Javadoc on Calendar.getInstance()?

"Gets a calendar using the default time zone and locale. The Calendar
returned is based on the current time in the default time zone with
the default locale."

The sample code you included only sets YEAR, MONTH, and DAY_OF_MONTH.
You're not setting the time at all, including the milliseconds, you're
seeing a Date object for the specified date but the *time when you
created it*. Of course this will change for each instance.

I'd also recommend omitting the excess tildes in your post and
unnecessary slashes in your code, it's superfluous visual noise.
 
Reply With Quote
 
Stefan Ram
Guest
Posts: n/a
 
      04-08-2008
Alan Krueger <> quotes:
>"Gets a calendar using the default time zone and locale. The Calendar
>returned is based on the current time in the default time zone with
>the default locale."


Actually, »current time« might be somewhat ambigous,
as there are several times, that might be deemed »current«:

- The time of the writing of the documentation
- The time of the reading of the documentation
- The time of the compilation of the call
- The time of the execution of the call
- The time of a read access to the calendar object

So the wording could be changed to »based on a time that is
not before the time of the latest sequence point before the
call of this operation and not later than the earliest
sequence point after the call of this operation«.

 
Reply With Quote
 
Alan Krueger
Guest
Posts: n/a
 
      04-08-2008
On Apr 8, 9:41 am, r...@zedat.fu-berlin.de (Stefan Ram) wrote:
> Alan Krueger <thuk...@gmail.com> quotes:
>
> >"Gets a calendar using the default time zone and locale. The Calendar
> >returned is based on the current time in the default time zone with
> >the default locale."

>
> Actually, »current time« might be somewhat ambigous,
> as there are several times, that might be deemed »current«:
>
> - The time of the writing of the documentation
> - The time of the reading of the documentation
> - The time of the compilation of the call
> - The time of the execution of the call
> - The time of a read access to the calendar object


You must be a blast at parties.
 
Reply With Quote
 
Roedy Green
Guest
Posts: n/a
 
      04-08-2008
Calendar has a built-in TimeZone. Date does not.

See http://mindprod.com/jgloss/calendar.html

These are two of the most gotcha-ridden classes in all of Java.
--

Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com
 
Reply With Quote
 
Roedy Green
Guest
Posts: n/a
 
      04-08-2008
On Tue, 8 Apr 2008 07:51:02 -0700 (PDT), Alan Krueger
<> wrote, quoted or indirectly quoted someone who
said :

>> - The time of the writing of the documentation
>> - The time of the reading of the documentation
>> - The time of the compilation of the call
>> - The time of the execution of the call
>> - The time of a read access to the calendar object

>
>You must be a blast at parties.


It think he wrote it in German, then translated. Germans have special
genes for parsing that leave the rest of us in the dust.

--

Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com
 
Reply With Quote
 
lbrtchx@gmail.com
Guest
Posts: n/a
 
      04-08-2008
On Apr 8, 10:28 am, Alan Krueger <thuk...@gmail.com> wrote:
> On Apr 8, 4:06 am, lbrt...@gmail.com wrote:
>
> > I am using aDateobject in order to get the time in millis because
> > thecalendarclass doesn't give ti to you directly
> > ~
> > Why on earth is that happening? Even if they are just a few
> > milliseconds apart it should not be happening?

>
> Did you read the Javadoc onCalendar.getInstance()?
>
> "Gets acalendarusing the default time zone and locale. TheCalendar
> returned is based on the current time in the default time zone with
> the default locale."
>
> The sample code you included only sets YEAR, MONTH, and DAY_OF_MONTH.
> You're not setting the time at all, including the milliseconds, you're
> seeing aDateobject for the specifieddatebut the *time when you
> created it*. Of course this will change for each instance.


~
THAT DESCRIBES EXACTLY MY MISTAKEN ASSUMPTIONS. In case someone runs
into the same issues.
~
Here is it what you should do:
~
in your ctor get and Instance of a Calendar and immediately set the
Time In Millis to 0
~
Kal = Calendar.getInstance();
Kal.setTimeInMillis(0);
~
then you can use a Calendar object for parsing/verifying actual dates
and get the Epoch time, a la
~
int iYr = Integer.parseInt(aYr);
int iMnth = HMKMIx.get(aMonth.toUpperCase());
int iDay = Integer.parseInt(aDayOfMonth);
// __
Kal.set(Calendar.YEAR, iYr);
Kal.set(Calendar.MONTH, iMnth);
Kal.set(Calendar.DAY_OF_MONTH, iDay);
// __ http://java.sun.com/javase/6/docs/ap...ndar.html#time
Date Dt = Kal.getTime();
lLModTm = Dt.getTime();
~
> I'd also recommend omitting the excess tildes in your post and
> unnecessary slashes in your code, it's superfluous visual noise.

~
... to you. It helps me jot down my comments and track progress once
I print my relatively large code bases
~
Thanks again
lbrtchx
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Brooke Hogan is so freaking HOT Biden's glory holes Digital Photography 11 06-06-2007 10:35 PM
<rant> freaking copyprotection on sudo CDs Dave - Dave.net.nz NZ Computing 67 07-17-2004 10:07 AM
Freaking l'users fygar MCSE 40 07-13-2004 08:36 PM
Need help - client's freaking Larry Webb HTML 1 04-18-2004 12:56 AM
Need help - client's freaking Larry Webb HTML 7 04-12-2004 03:26 AM



Advertisments