c# - obtener - Convierta DateTime.Now a un nombre de archivo de Windows válido
obtener año actual c# (5)
Úselo para remover el patrón:
DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
He tenido este problema varias veces y acabo de utilizar una solución alternativa, pero pensé que podría preguntar aquí en caso de que haya una opción más fácil. Cuando tengo una cadena de DateTime.Now
y luego quiero usar esto en un nombre de archivo, no puedo porque Windows no permite los caracteres / y: en nombres de archivos, tengo que ir y reemplazarlos así:
string filename = DateTime.Now.ToString().Replace(''/'', ''_'').Replace('':'', ''_'');
Lo cual parece una molestia, ¿hay alguna manera más fácil de hacer esto? Cualquier sugerencia muy apreciada.
Puede usar el formato largo de la marca de tiempo:
DateTime.Now.ToBinary()
Según lo escrito por Samich, pero
// The following will produce 2011-10-24-13-10
DateTime.Now.ToString("yyyy-MM-dd-HH-mm", CultureInfo.InvariantCulture);
Si no confía en mí, intente establecer la cultura en el new CultureInfo("ar-sa");
:-)
Añadiré que, si odias al mundo, esto es lo más preciso:
DateTime.Now.Ticks.ToString("D19");
Hay 19 dígitos en DateTime.MaxValue.Ticks
Si odias al mundo aún más:
DateTime.Now.Ticks.ToString("X16");
Hay 16 dígitos hexadecimales en DateTime.MaxValue.Ticks
.
Si necesita que el horario sea más preciso, puede usar:
DateTime.Now.ToString("O").Replace(":", "_") //2016-09-21T13_14_01.3624587+02_00
o (si necesita un poco menos)
DateTime.Now.ToString("s").Replace(":", "_") //2016-09-21T13_16_11
Ambos son nombres de archivo válidos y son ordenables.
Puedes crear un método de extensiones:
public static string ToFileName(this DateTime @this)
{
return @this.ToString("O").Replace(":", "_");
}
Y luego úsalo así:
var saveZipToFile = "output_" + DateTime.Now.ToFileName() + ".zip";
El formato "s" no tiene en cuenta las zonas horarias y, por lo tanto, las fechas:
- 2014-11-15T18: 32: 17 + 00: 00
- 2014-11-15T18: 32: 17 + 08: 00
formateado con "s" son idénticos.
Entonces, si su fecha y hora representan las zonas horarias dirrerent, le recomendaría usar "O" o usar DateTime.UtcNow
.
- El formato "O" es compatible con ISO 8601, que se describe aquí
- El formato "s" se describe aquí
DateTime.Now.ToString("dd_MM_yyyy")