2010-07-23 13 views
15

Estoy usando DateTime.Now.ToString() en un servicio de Windows y me está dando como resultado "7/23/2010 12:35:07 PM" Quiero para excluir la segunda parte, mostrando solo hasta el minuto.Cómo excluir segundos de DateTime.ToString()

Entonces, ¿cómo excluir los segundos de ese formato ...?

+0

consulte este http://www.csharp-examples.net/string-format-datetime/ –

+0

@Amit, ¿podría marcar una respuesta para esto, por favor? – JohnOsborne

Respuesta

16

lo necesario para pasar en un format string a la función ToString():

DateTime.Now.ToString("g") 

Esta opción es la cultura conscientes.

Para este tipo de salida también se puede utilizar un custom format string, si desea tener un control completo:

DateTime.Now.ToString("MM/dd/yyyy hh:mm") 

Esta es la salida es exactamente el mismo, independientemente de la cultura.

8

Se puede usar un format:

DateTime.Now.ToString("MM/dd/yyyy hh:mm tt"); 
29

de salida lo más corto patrón de fecha:

DateTime.Now.ToString("g") 

Ver MSDN para la documentación completa.

+0

Esta es la mejor solución, ya que brinda lo que el OP quiere en la cultura en-EE. UU. Pero también depende de la cultura en general. – Noldorin

+0

¿Cómo satisface esta solución esto: "Quiero excluir la segunda parte, que se muestra solo hasta el minuto". ? –

+0

@ JanMacháček "g" no imprimirá los segundos, pero imprime la fecha y la hora como la pregunta, siempre y cuando la cultura esté configurada correctamente en la secuencia. –

-1

Trate DateTime.Now.ToShortDateString() + " " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString()

+0

Esto solo mostrará la parte de la fecha. Tendría que agregar también ToShortTimeString. –

1

prueba por favor:

DateTime.Now.ToString("MM/dd/yyyy hh:mm"); 
0

Si desea permanecer independiente del lenguaje, Podría usar el siguiente código (tal vez en un IValueConverter (vea el segundo fragmento de código)) para eliminar solo la parte de segundos de la cadena:

int index = dateTimeString.LastIndexOf(':'); 
if (index > -1) { 
    dateTimeString = dateTimeString.Remove(index, 3); 
} 

Aquí hay una implementación del convertidor.

[ValueConversion(typeof(DateTime), typeof(string))] 
public class DateTimeToStringConverter : Markup.MarkupExtension, IValueConverter { 
    public DateTimeToStringConverter() : base() { 
     DisplayStyle = Kind.DateAndTime; 
     DisplaySeconds = true; 
    } 

    #region IValueConverter 
    public object Convert(object value, Type targetType, object parameter, Globalization.CultureInfo culture) { 
     if (value == null) return string.Empty; 
     if (!value is DateTime) throw new ArgumentException("The value's type has to be DateTime.", "value"); 

     DateTime dateTime = (DateTime)value; 

     string returnValue = string.Empty; 

     switch (DisplayStyle) { 
      case Kind.Date: 
       returnValue = dateTime.ToShortDateString(); 
       break; 
      case Kind.Time: 
       returnValue = dateTime.ToLongTimeString(); 
       break; 
      case Kind.DateAndTime: 
       returnValue = dateTime.ToString(); 
       break; 
     } 

     if (!DisplaySeconds) { 
      int index = returnValue.LastIndexOf(':'); 

      if (index > -1) { 
       returnValue = returnValue.Remove(index, 3); 
      } 
     } 

     return returnValue; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, Globalization.CultureInfo culture) { 
     throw new NotSupportedException(); 
    } 
    #endregion 

    public override object ProvideValue(IServiceProvider serviceProvider) { 
     return this; 
    } 

    #region Properties 
    public Kind DisplayStyle { get; set; } 

    public bool DisplaySeconds { get; set; } 
    #endregion 

    public enum Kind { 
     Date, 
     Time, 
     DateAndTime 
    } 
} 

También puede usarlo en XAML como una extensión de marcado:

<TextBlock Text="{Binding CreationTimestamp, Converter={local:DateTimeToStringConverter DisplayStyle=DateAndTime, DisplaySeconds=False}}" /> 
Cuestiones relacionadas