Re: TINI Clock changed time suddenly..
Shawn Silverman <[email protected]> Tue, 15 Jun 2004 23:43:53 -0500
| Newsgroups | gmane.comp.hardware.microcontrollers.tini |
|---|---|
| Message-ID | <[email protected]> |
Your code doesn't look incorrect, but I can't resist suggesting speed
improvements.
Your code will run much faster this way:
public static String generateTimeStampAttribute(Date date, boolean
includeSeconds) {
if (date == null) {
return " ";
}
StringBuffer ts = new StringBuffer();
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
c.setTime(date);
ts.append(c.get(Calendar.YEAR));
append2DigitField(ts, Calendar.MONTH, c); //month is 0-based
append2DigitField(ts, Calendar.DAY_OF_MONTH, c);
append2DigitField(ts, Calendar.HOUR_OF_DAY, c);
append2DigitField(ts, Calendar.MINUTE, c);
if (includeSeconds) {
append2DigitField(ts, Calendar.SECOND, c);
}
return ts.toString();
}
private static void append2DigitField(StringBuffer buf, int field,
Calendar calendar) {
int val = calendar.get(field);
if (field == Calendar.MONTH) {
val++; //month is zero based
}
val %= 100; // Ensure the value is < 100 (just in case; delete if you
feel like)
buf.append((char)((val / 10) + '0'));
buf.append((char)((val % 10) + '0'));
}
This code also uses much less memory.
Regards,
-Shawn
On 15-Jun-04, at 3:22 PM, Kunal Shah wrote:
> This might be the weirdest thing I have ever seen on TINI. One of our
> device
> (TINIm-400 using dallas semiconductors development boards) on the field
> suddenly started reporting wrong time of Jan 10, 2004. The same device
> was
> working fine till Saturday morning with correct time (June 12 2004) but
> suddenly on the same day it started reporting with strange time-stamps.
>
> We are not modifying TINI's clock anywhere inside our program..Also
> there
> are currently installed on one of our client's site and no one has
> changed
> date on it. Can anyone has ever seen this type of behavior? What can
> cause
> that? The first obvious doubt can be on the way we are generating
> time-stamps that we are using on device and send to our server.. I have
> included the snippet of code where we are generating this
> time-stamp..just
> in case I am not seeing anything obvious..
>
> Also the change of date was not one-time thing.. but actually it seems
> to
> have some-how set its RTC to Jan, 2004. It has reported Jan 10, 11 and
> 12
> instead of June 12, 13 and 14...
>
> I will greatly appreciate any ideas about possible causes for this
> behavior..
>
> Thanks..
>
>
> Kunal Shah
> Development
> SensorLogic | M2M made easy.
> 972-934-7375 x 2121
> 972-934-7376 (fax)
> [email protected]
> www.Sensorlogic.com
>
> FORMAT OF TIMESTAMP WE HAVE USED IS YYYYMMDDhhmm
> Y-year; M-month; D-day; h-hour; m-minute
> where month is 1 based and zero padded if its a single digit (i.e.
> Jan -
> 01, Feb - 02 etc.)
> /**
>
> * This method is used to generate the string representation of the
> timestamp
>
> * @param date the date object the timestamp should be generated from
>
> * @param includeSeconds true if the result should specify seconds
>
> * @return
>
> */
>
> public static String generateTimeStampAttribute(Date date, boolean
> includeSeconds) {
>
> if (date == null) {
>
> return " ";
>
> }
>
> String ts = "ts=\"";
>
> Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
>
> c.setTime(date);
>
> ts += Integer.toString(c.get(Calendar.YEAR));
>
> ts += get2DigitField(Calendar.MONTH, c); //month is 0-based
>
> ts += get2DigitField(Calendar.DAY_OF_MONTH, c);
>
> ts += get2DigitField(Calendar.HOUR_OF_DAY, c);
>
> ts += get2DigitField(Calendar.MINUTE, c);
>
> if (includeSeconds) {
>
> ts += get2DigitField(Calendar.SECOND, c);
>
> }
>
> return ts + "\"";
>
> }
>
> /**
>
> * This method will zero pad a date field if necessary and adjust the
> month
> field to be 1 based
>
> * @param field the Calendar field to be returned
>
> * @param calendar The calendar object the field will be extracted from
>
> * @return
>
> */
>
> private static String get2DigitField(int field, Calendar calendar) {
>
> int val = calendar.get(field);
>
> if (field == Calendar.MONTH) {
>
> val++; //month is zero based
>
> }
>
> String valAsString = Integer.toString(val);
>
> if (valAsString.length() < 2) {
>
> valAsString = "0" + valAsString;
>
> }
>
> return valAsString;
>
> }
_______________________________________________
TINI mailing list
TINI-6tN4nzCoH/[email protected]
To UNSUBSCRIBE, edit your profile, or see list archives:
http://lists.dalsemi.com/mailman/listinfo/tini