Pregunta

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 la mínima intervención del usuario?

¿Fue útil?

Solución

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 (las pierde al interactuar con el objeto COM IIRC).

Otros consejos

La sugerencia anterior de usar " yyyy-MM-dd HH: mm: ss " está bien, aunque creo que Excel tiene una resolución de tiempo mucho más precisa que esa. Encuentro esta publicación bastante creíble (sigue el hilo y verás mucha aritmética y experimentando con Excel), y si es correcto, tendrás tus milisegundos. Puede simplemente colocar los decimales al final, es decir, " aaaa-mm-dd hh: mm: ss.000 " ;.

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

Para obtener la máxima información [1] transmitida en las celdas sin intervención humana, es posible que desee dividir su marca de tiempo en una parte de fecha y una parte de tiempo, con la parte de tiempo solo a la segunda. Me parece que Excel quiere ofrecerle a lo más tres niveles " visibles " (donde las fracciones de segundo son su propio nivel) en una celda determinada, y desea siete: años, meses, días, horas, minutos, segundos y fracciones de segundo.

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


[1] Es decir, información numérica. Si desea ver la mayor cantidad de información posible pero no le importa hacer cálculos con ella, podría crear algún formato que Excel definitivamente analizará como una cadena, y así dejarlo solo; p.ej. " aaaammdd.hhmmss.000 " ;.

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

Creo que si utilizas el tipo de datos double , el nuevo cálculo en Excel funcionará bien.

Vaya a la configuración de idioma en el Panel de control, luego a 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 utiliza esos formatos al analizar CSV.

Aún más, si la configuración regional utiliza caracteres más allá de ASCII, tendrá que emitir CSV en el correspondiente Windows anterior a Unicode " ANSI " página de códigos, por ejemplo CP1251. Excel no aceptará UTF-8.

En cuanto a las zonas horarias. Tengo que almacenar el desplazamiento UTC en segundos desde UTC de esa manera las fórmulas en Excel / OpenOffice pueden eventualmente localizar fechas de datos. Descubrí que esto es más fácil que almacenar cualquier número que tenga un 0 delante. -0900 no se analizó bien en ningún sistema de hoja de cálculo y, al importar, fue casi imposible capacitar a la gente para que lo haga.

  

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

como contestó el usuario662894.

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

Entonces, " aaaa-mm-dd hh: mm: ss.000000 " no funcionará, y cuando Excel recibe este tipo de cadena (del archivo CSV), realizará redondeo en lugar de truncamiento .

Esto puede estar bien, excepto cuando la precisión de microsegundos es importante, en cuyo caso es mejor NO activar un reconocimiento de tipo de datos automático, sino simplemente mantener la cadena como una cadena ...

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

Código Java para crear un archivo XML.

  
    

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

  
public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}

Por lo tanto, extrañamente excel importa una fecha csv de diferentes maneras. Y , los muestra de manera diferente según el formato utilizado en el archivo csv. Desafortunadamente, el formato ISO 8061 viene como una cadena. Lo que le impide posiblemente reformatear la fecha.

Todos los que vienen como una fecha ... contienen toda la información ... pero tienen un formato diferente ... si no te gusta, puedes elegir un nuevo formato para la columna en Excel y trabajará. (Nota: puede indicar que entró como una fecha / hora válida, ya que justificará a la derecha ... si aparece como una cadena, justificará a la izquierda)

Aquí están los formatos que probé:

" aaaa-MM-dd " aparece como una fecha de curso cuando se abre en Excel. (También " MM / dd / aaaa " funciona)

" aaaa-MM-dd HH: mm: ss " el formato de visualización predeterminado es " MM / dd / aaaa HH: mm " (fecha y hora sin segundos)

" aaaa-MM-dd HH: mm: ss.fff " el formato de visualización predeterminado es " HH: mm: ss " (tiempo solo w / segundos)

Supongo que formato ISO es una buena idea. ( Artículo de Wikipedia , también con información de tiempo)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top