2012-03-09 11 views
7

¿Hay un valor de formato para DateTime.ToString ("") que especificará el día del año en tres dígitos?DateTime Format Día del año

Por ejemplo:

  • 1 Ene, 2012 ¿ser 001
  • 1 Feb, 2012 ¿será 032
  • 31 de Dic, 2012 ¿será 366 (año bisiesto)
  • 31-dic 2011 sería 365

Respuesta

21

No, puede usar DateTime.DayOfYear .ToString ("000");

Sus ejemplos:

new DateTime(2012, 1, 1).DayOfYear.ToString("000"); 
new DateTime(2012, 2, 1).DayOfYear.ToString("000"); 
new DateTime(2012, 12, 31).DayOfYear.ToString("000"); 
new DateTime(2011, 12, 31).DayOfYear.ToString("000"); 
+0

Bummer , pero esto es casi tan bueno gracias. – Dismissile

+0

Escribiste muy rápido. -) –

0

Necesitaba una forma de permitir a los usuarios dar un formato que pudiera manejar el día del año y se me ocurrió el siguiente código.

public static string FormatDate(this DateTime date, string format) 
{ 
    var builder = new StringBuilder(); 
    int numOfjs = 0; 
    bool escaped = false; 
    foreach (char c in format) 
    { 
     if (c == 'j' && !escaped) 
     { 
      numOfjs++; 
     } 
     else 
     { 
      if (c == 'j' && escaped) 
      { 
       builder.Remove(builder.Length - 1, 1); 
      } 

      if (numOfjs > 0) 
      { 
       var dayOfYearFormat = new string('0', Math.Min(3, numOfjs)); 
       builder.Append(date.DayOfYear.ToString(dayOfYearFormat)); 
      } 

      numOfjs = 0; 
      builder.Append(c); 
     } 

     escaped = c == '\\' && !escaped; 
    } 

    if (numOfjs > 0) 
    { 
     var dayOfYearFormat = new string('0', Math.Min(3, numOfjs)); 
     builder.Append(date.DayOfYear.ToString(dayOfYearFormat)); 
    } 

    return date.ToString(builder.ToString()); 
} 

Esto le permite tener un formato que reemplazará las letras j consecutivas no delimitadas con el día del año. Va a cero pad hasta 3 dígitos en función del número de j. Más de 3 j's consecutivos actúan como 3.

Básicamente reescribe el formato para reemplazar las j delimitadas con solo j, y j consecutivas con el día del año. A continuación, pasa este nuevo formato al DateTime.ToString().

0

Sé que esto es un poco viejo, pero si absolutamente, positivamente, hay que hacerlo en una sola línea de código que no tienen acceso a la función DateTime.DayOfYear (como si tuviera que hacer hoy):

int myDay = floor(Now() - Date(parseInt(Now().ToString("yyyy")), 1, 1)) + 1; 
+0

Tengo curiosidad por saber cuál es tu caso de uso cuando a) tienes que hacerlo en una sola línea de código yb) sin DayOfYear – Dismissile

+0

Creación de scripts por el lado del usuario, estilo MS Access. Sí, claro, podría haber entrado y haber agregado la función que ni siquiera sabíamos que existía cuando se escribió el controlador de scripts, pero luego tendríamos que recompilar y probar y obtener la nueva versión del cliente y desperdiciar mucho más de nuestro el tiempo y el tiempo del cliente para un caso de uso que nunca ha aparecido en la década o así que el programa ha existido, pero es mucho mejor si podemos hacerlo con las funciones ya provistas. – Trevortni

Cuestiones relacionadas