2009-08-20 5 views
6

DateTime.Hour 속성을 얻으면 항상 24 시간을 얻습니다 (6PM이 나에게 18을 줄 것입니다).DateTime에서 12 시간을 얻는 방법

는 어떻게 "12시간"시간이 오후 6 단지 나에게 6

내가 분명히 자신을 확인 할 수 있습니다받을 수 있나요하지만 난이에 대한 기능을 내장 있다고 가정.

+0

그냥 * 물어, 또는 DateTim * 전자를 의미 할 수 있을까? –

+0

그래도 아침과 저녁 시간을 어떻게 비교할 수 있습니까? – ThePower

+0

나는이 컨트롤을 필요가 없다. . . "Hour" "Min" "AM/PM"에 대한 별도의 텍스트 상자가 있기 때문입니다. 이 코드를 모두 상속 된 코드로 사용하기 위해 캘린더 컨트롤로 옮길 것입니다. – leora

답변

15

방법에 대해 :

DateTime.Hour % 12 

물론 0-11을 줄 것이다 그건 ... 당신이 1-12 하시겠습니까? 그렇다면 : 나는 생각하지 않습니다

((DateTime.Hour + 11) % 12) + 1 

당신이 그것을 필요가 없습니다 때문에

1

은 주로 내장 함수가 없을 ... 간단한 아무것도 내장되어있다 :

  • 사용자에게 출력 할 때이 작업을 수행하는 경우 형식 문자열을 사용하십시오.
  • 계산을 위해이 작업을 수행하는 경우 날짜 시간을 빼거나 시간 이동을 직접 추가 할 수 있습니다.

이외의 수학 계산은 충분히 간단하며 다른 답변에서도 이미 사용할 수 있습니다.

+0

다른 데이터 소스에서 얻은 정수와 비교 한 시간 비교를 수행하고 있습니다 (분명히 12 시간 만 제공) – leora

+1

다른 소스를 datetime으로 변환해서는 안됩니까? 맹목적으로 12 시간을 비교하는 것은 위험합니다. –

5

DateTime.Now.ToString ("hh"); -> 이것을 사용하면 18 시간 동안 "06"이됩니다.

3

기본 제공되는 메소드에 대해 알지 못하지만,이를 수행하기 위해 언제든지 확장 메소드를 추가 할 수 있습니다.

물론 코드를 원하는 방식으로 교체 할 수 있습니다.

public static class Extension 
{ 
    public static int GetTwelveCycleHour(this DateTime dateTime) 
    { 
     if (dateTime.Hour > 12) 
     { 
      return dateTime.Hour - 12; 
     } 

     return dateTime.Hour; 
    } 
} 
+2

시간이 12 분이 더 간단합니다. –

+0

제가 답변을 게시 한 후이를 알게되었으므로 "물론 코드를 원하는 방식으로 교체 할 수 있습니다." 나의 요점은 내게이 질문이 확장 방법에 대한 좋은 후보자로 들린다는 것이었다. –

+0

저는 Jon Skeet의 대답을 저만 빼고 싶지 않았기 때문에 주석을 추가하고 코드를 변경하지 않았습니다. –

2

무엇 단순히 약 :

public static int GetTwelveCycleHour(this DateTime dateTime) 
{ 
    return Convert.ToInt32(dateTime.ToString("h")); 
} 
+1

포맷팅 및 파싱? 이것은 트릭을 수행 할 것이지만 불필요하게 CPU 사이클을 낭비합니다. 출력을 표시하기위한 서식을 저장하고 사용자 입력을 처리하기 위해 구문 분석을 저장합니다. Jon Skeet의 대답으로 훨씬 나아졌습니다. – MCattle

+1

사용중인 C# 버전이 확실하지 않지만 C# 5에서 잘못된 형식 예외가 발생합니다. 그것은 ToString ("% h")이어야합니다; –

+1

@BenPretorius 네 말이 맞아. – Eternal21

관련 문제