So we switched (in Europe) from summer time to winter time. At 3am, it's 2 am again. So what ?
Well, I was running some tests on my computer before crashing, and I was quite surprised to get an error in a part I didn't modified today and which was running fine this afternoon. What was wrong ?
We use some class to generate CSN (Change Sequence Number), and obviously we have some tests for this class. One of them failed for one hour...
Here is the test :
public class CsnTest
{
private SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmss.123456'Z'" );
@Test
public void testCSN()
{
long ts = System.currentTimeMillis();
Csn csn = new Csn( sdf.format( new Date( ts ) ) + "#123456#abc#654321" );
assertEquals( ts/1000, csn.getTimestamp()/1000 ); <<---- This assert fails.
Why did I get an error ? Because the way we create the CSN is simply wrong : we don't take into account the fact that the computer is not necessarily always using the same time zone, and that some operation assumes that it got a GMT based time, when other uses the Locale.
Be extremely cautious when dealing with dates and time zones : you may get a very bad surprise in production, instead of experimenting those errors by chance, just because you are running tests at 2:30 am a Saturday before going to bed !
dimanche, octobre 31, 2010
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire