2010-07-23 7 views
15

Windows 서비스에서 DateTime.Now.ToString()을 사용하고 있으며 "7/23/2010 12:35:07 PM"과 같은 출력을 제공합니다. 원합니다 두 번째 부분을 제외하고 분까지만 표시합니다.DateTime.ToString()에서 초를 제외하는 방법

그렇다면이 형식에서 초를 제외하는 방법은 무엇입니까?

+0

참조 해주십시오 http://www.csharp-examples.net/string-format-datetime/ –

+0

@Amit, 이거 대답 해줄 수 있겠 니? – JohnOsborne

답변

16

당신은 ToString() 함수에 format string에 전달해야

DateTime.Now.ToString("g") 

이 옵션은 문화를 알고있다.

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

에 관계없이 문화의 정확히 같은이 출력됩니다 : 출력 이런 종류의 당신이 완벽하게 제어하려는 경우 또한, custom format string를 사용할 수에 대한

.

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

당신은 format를 사용할 수 있습니다.

29

출력이 짧은 날짜 패턴 :

DateTime.Now.ToString("g") 

전체 문서에 대한 MSDN를 참조

+0

이것이 OP가 영어 (en-US) 문화에서 원하는 것을 제공하지만 일반적으로 문화에 따라 다르므로 최상의 솔루션입니다. – Noldorin

+0

이 솔루션은 어떻게 만족합니까? "두 번째 부분을 제외하고 최대 1 분까지만 표시하고 싶습니다." ? –

+0

@ JanMacháček "g"는 초를 인쇄하지 않지만 질문과 같이 인쇄 날짜와 시간은 문화권이 스레드에 올바르게 설정되어있는 한 묻습니다. –

-1

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

+0

이것은 날짜 부분 만 표시합니다. ToShortTimeString도 추가해야합니다. –

1

하시기 바랍니다 테스트보고에 대한 DateTime.Now.ToString("M/d/yyyy hh:mm");

같은 것을 수행 할 수 있습니다 시도해보십시오

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

당신은 언어를 유지하려면, 다음 코드를 사용할 수 있습니다 (어쩌면 IValueConverter (두 번째 코드 스 니펫 참조))를 사용하여 문자열에서 초 부분 만 제거합니다.

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

다음은 변환기의 구현입니다.

[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 
    } 
} 

또한 태그 확장으로 XAML에서 사용할 수 있습니다 :

<TextBlock Text="{Binding CreationTimestamp, Converter={local:DateTimeToStringConverter DisplayStyle=DateAndTime, DisplaySeconds=False}}" /> 
관련 문제