2009-04-29 14 views
80

Estoy escribiendo un archivo CSV. Necesito escribir marcas de tiempo que sean precisas al menos para el segundo, y preferiblemente para el milisegundo. ¿Cuál es el mejor formato para las marcas de tiempo en un archivo CSV para que Excel pueda analizarlo de forma precisa y sin ambigüedades con una mínima intervención del usuario?¿Mejor formato de marca de tiempo para CSV/Excel?

+0

qué idioma se está utilizando para la creación de la salida ? –

Respuesta

70

Para una segunda precisión, aaaa-MM-dd HH: mm: ss debería hacer el truco.

Creo que Excel no es muy bueno con fracciones de segundo (los pierde al interactuar con el objeto COM IIRC - Trataré de encontrar una referencia y publicarlo aquí).

+0

Sí, estoy de acuerdo con usted y Fredrik. Si pudieras desenterrar esas referencias, ciertamente estaría agradecido. ¡Gracias! –

+11

¿Alguna idea de cómo mostrarías la zona horaria? – nickf

+8

Para cualquiera que use Ruby's ['strftime'] (http://apidock.com/ruby/DateTime/strftime), la cadena del argumento equivalente es' "% Y-% m-% d% H:% M:% S" ' –

2

Creo que si utilizó el tipo de datos double, el recálculo en Excel funcionaría muy bien.

+0

Lo intenté y funciona muy bien. Solo tengo que decirle a Excell que el formato de esa columna en particular es Fecha/Hora. No detectará esto automáticamente desde el CSV, ya que obviamente no describe los datos –

0

Supongo que ISO-format es una buena idea. (Wikipedia article, también con información de tiempo)

+0

De acuerdo; esta parece ser la mejor apuesta. –

+1

(Votación negativa; de hecho, no, Excel no reconoce ese formato) – Doug

+1

@Doug Acabo de ejecutar una prueba para verificarlo: funciona bien en Office 2010, edición en inglés, intenté con mis dos configuraciones locales (sueco, que sucede que usa el formato ISO para las fechas, y el inglés de EE. UU.). Fuera de interés: ¿en qué entorno falló? No me sorprende en absoluto que funcione para algunos y falla para algunos: Excel no es realmente una maravilla de consistencia en mi experiencia ... –

11

La sugerencia anterior de utilizar "aaaa-MM-dd HH: mm: ss" está bien, aunque creo que Excel tiene una resolución de tiempo mucho más fina que eso. Creo que this post es bastante creíble (sigue el hilo y verás mucha aritmética y experimentar con Excel), y si es correcto, tendrás tus milisegundos. Puede tachuelas en lugares decimales al final, es decir "aaaa-mm-dd hh: mm: ss.000".

Debe tener en cuenta que Excel puede no necesariamente formatear los datos (sin intervención humana) de tal manera que verá toda esa precisión. En mi computadora en el trabajo, cuando configuro un CSV con datos "aaaa-mm-dd hh: mm: ss.000" (a mano usando el Bloc de notas), obtengo "mm: ss.0" en la celda y "m"/d/aaaa   hh: mm: ss AM/PM "en la barra de fórmulas.

Para el máximo de información [1] transportado en las células sin la intervención humana, es posible que desee dividir su marca de tiempo en una parte de fecha y una porción de tiempo, con la porción de tiempo sólo para el segundo. Me parece que Excel quiere darte como máximo tres "niveles" visibles (donde fracciones de segundo son su propio nivel) en una celda determinada, y quieres siete: años, meses, días, horas, minutos, segundos, y fracciones de segundo.

O, si no necesita que la marca de tiempo sea legible por el ser humano, pero quiere que sea lo más precisa posible, puede preferir simplemente almacenar un número grande (internamente, Excel solo usa el número de días) , incluidos los días fraccionarios, desde una fecha "época").


[1] Es decir, información numérica. Si desea ver tanta información como sea posible pero no le importa hacer cálculos con ella, puede crear algún formato que Excel definitivamente analizará como una cadena, y así lo dejará en paz; p.ej. "aaaammdd.hhmmss.000".

9

El formato "aaaa-MM-dd hh: mm: ss.000" no funciona en todas las configuraciones regionales. Para algunos (al menos danés) "aaaa-MM-dd hh: mm: ss, 000" funcionará mejor.

+0

Extrañamente, Excel 2010 no detecta las fechas cuando la parte en milisegundos es 000. Cualquier otra acción funcionará. –

1

En cuanto a las zonas horarias. Tengo que almacenar el desplazamiento UTC como segundos de UTC de esa manera las fórmulas en Excel/OpenOffice pueden eventualmente localizar fechas de tiempo. Descubrí que esto es más fácil que almacenar cualquier número que tenga un 0 en frente de él. -0900 no se analizó correctamente en ningún sistema de hoja de cálculo y la importación fue casi imposible de entrenar.

1

Vaya a la configuración de idioma en el Panel de control, luego en Opciones de formato, seleccione una configuración regional y vea el formato de fecha real para la configuración regional elegida utilizada por Windows de forma predeterminada. Sí, ese formato de marca de tiempo es sensible a la configuración regional. Excel usa esos formatos al analizar CSV.

Además, si la configuración regional utiliza caracteres que van más allá de ASCII, deberá emitir CSV en la correspondiente página de códigos "ANSI" pre-Unicode de Windows, p. CP1251. Excel no aceptará UTF-8.

0

Pruebe MM/dd/aaaa hh: mm: ss un formato.

código de Java para crear un archivo XML. .

xmlResponse.append ("mydate>") append (this.formatDate (resultSet.getTimestamp ("fecha"), "MM/dd/aaaa hh: mm: ss a")). adjuntar("");

"aaaa hh-mm-dd: mm: ss.000"
public String formatDate(Date date, String format) 
{ 
    String dateString = ""; 
    if(null != date) 
    { 
     SimpleDateFormat dateFormat = new SimpleDateFormat(format); 
     dateString = dateFormat.format(date); 
    } 
    return dateString; 
} 
1

formato no funciona en todas las configuraciones regionales. Para , algunos (al menos en danés) "aaaa-mm-dd hh: mm: ss, 000" funcionarán mejor.

como respuesta por user662894.

Quiero agregar: no intente obtener los microsegundos de, por ejemplo, el tipo de datos datetime2 de SQL Server: Excel no puede manejar más de 3 segundos fraccionarios (es decir, milisegundos).

"aaaa hh-mm-dd: mm: ss.000000" Así que no va a funcionar, y cuando Excel se alimenta este tipo de cadena (del archivo CSV), se llevará a cabo el redondeo en lugar de truncamiento.

Esto puede estar bien, excepto cuando los asuntos de precisión de microsegundos, en cuyo caso son más conveniente no activar un reconocimiento automático de tipo de datos, pero sólo mantener la cadena como de cadena ...

Cuestiones relacionadas