First, the reproducable example, showing how converting from character to 
POSIXct to character changes the milliseconds in the first time stamp 
though not in the second:

> as.POSIXct('2010-06-03 9:03:58.324')
[1] "2010-06-03 09:03:58.323 PDT"

> as.POSIXct('2010-06-03 9:03:58.325')
[1] "2010-06-03 09:03:58.325 PDT"

This seems to be due to truncation of the numeric value of the POSIX 
object during conversion to character:

> as.numeric(as.POSIXct('2010-06-03 9:03:58.324'))
[1] 1275581038.3239998817

Neither format() nor round() seem to be of assistance here.  Anyone got a 
solution?

> as.POSIXct(round(as.double(as.POSIXct('2010-06-03 09:03:58.324')), 
digits=3), origin=(as.POSIXct('1970-01-01')))
[1] "2010-06-03 17:03:58.323 PDT"
> format(as.POSIXct('2010-06-03 09:03:58.324'), "%Y-%m-%d %H:%M:%OS4")
[1] "2010-06-03 09:03:58.3239"

Thanks,
cur
-- 
Curt Seeliger, Data Ranger
Raytheon Information Services - Contractor to ORD
seeliger.curt@epa.gov
541/754-4638

	[[alternative HTML version deleted]]

