DateTime에서 AM / PM 값을 어떻게 얻습니까?


204

해당 코드는 다음과 같습니다.

public static string ChangePersianDate(DateTime dateTime)
{
    System.Globalization.GregorianCalendar PC = new System.Globalization.GregorianCalendar();
    PC.CalendarType = System.Globalization.GregorianCalendarTypes.USEnglish;
    return
    PC.GetYear(dateTime).ToString()
    + "/"
    + PC.GetMonth(dateTime).ToString()
    + "/"
    + PC.GetDayOfMonth(dateTime).ToString()
    + ""
    + PC.GetHour(dateTime).ToString()
    + ":"
    + PC.GetMinute(dateTime).ToString()
    + ":"
    + PC.GetSecond(dateTime).ToString()
    + " "
    ????????????????
}

dateTime값 에서 AM / PM을 어떻게 얻을 수 있습니까?


24
이보다 형식을 지정하는 훨씬 더 좋은 방법 DateTime이 있습니다. msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
ChrisF

그냥 사용하십시오dateTime.ToString("tt");
David Jesus

답변:


368

어때요?

dateTime.ToString("tt", CultureInfo.InvariantCulture);

3
이 권리를 얻으려면 새로운 System.Globalization.CultureInfo ( "en-US")를 추가해야합니다 (미국 상황에서 스레드를 아직 실행하지 않은 경우)
thomas

1
@ 토마스-좋은 지적. 다음을 지정하도록 수정되었습니다.CultureInfo.InvariantCulture
Andy

8
ToString("tt", System.Globalization.CultureInfo.InvariantCulture)
IndieTech Solutions

날짜부터 AM / PM을 가져옵니다. 그러나 언제든지 AM을 PM으로 변경하려면. 그럼 어떻게해야합니까?
Ajay Sharma

2
@AjaySharma 형식 평가 12 시간 전에 추가하십시오. DateTime.Now.AddHours(12).ToString("tt", CultureInfo.InvariantCulture)
AXMIM

107
string.Format("{0:hh:mm:ss tt}", DateTime.Now)

시간의 문자열 값을 제공해야합니다. tt는 am / pm을 추가해야합니다.

관련 주제를 볼 수도 있습니다.

현재 시간을 어떻게 알 수 있습니까?


8
이 수 소문자해야 hh비트 무의미은 오전과 오후에 24 시간 시간 현재 표현 출력으로
아니 사랑

1
@LukeMcGregor 귀하의 제안에 따라 답변을 수정했습니다.
닥터 존스

46

DateTime항상 "미국"(그레고리오) 달력에 내부적으로해야한다. 그래서 당신이 할 경우

var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));

적은 줄로 원하는 것을 얻을 수 있습니다.


33

문자열 형식을 사용하여 매우 간단

의 위에 .ToSTring("") :

  • "hh"를 사용하는 경우->> 01-12의 12 시간 시계를 사용하는 시간.

  • "HH"를 사용하는 경우->> 00-23의 24 시간 시계를 사용하는 시간.

  • "tt"->> Am / Pm 부호를 추가하면

23:12에서 11:12 Pm으로 변환하는 예 :

DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("hh:mm tt");   // this show  11:12 Pm
var res2 = d.ToString("HH:mm");  // this show  23:12

Console.WriteLine(res);
Console.WriteLine(res2);

Console.Read();

다른 언어를 사용하는 다른 언어로 창에서 실행되는 동일한 코드가 동일한 언어로 다른 결과를 생성하기 때문에 다른 문화에 관심이있는 것은 아닙니다.

아랍어 언어 문화로 설정된 창문의 예는 다음과 같습니다.

// 23:12시

م는 저녁 (مساء의 첫 번째 문자)을 의미합니다.

다른 시스템 문화권에서는 windows 지역 및 언어 옵션에 설정된 내용에 따라 // 23:12 du가 표시됩니다.

Windows 제어판에서 Windows 지역 및 언어-> 현재 형식 (콤보 상자)의 다른 형식으로 변경하고 변경 ... 응용 프로그램을 다시 작성 (실행)하고 iam에 대해 이야기하는 것을 볼 수 있습니다.

> 현재 시스템의 문화가 영어로 설정되어 있지 않은 경우 영어 이벤트에서 Am 및 Pm 단어를 강제로 표시 할 수있는 사람은 누구입니까?

두 줄을 추가하여 쉽게 :->

첫 번째 단계 using System.Globalization;는 코드 위에 추가

이전 코드를 다음과 같이 수정하십시오.

DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("HH:mm tt", CultureInfo.InvariantCulture); // this show  11:12 Pm

InvariantCulture => 기본 영어 형식을 사용합니다.

또 다른 질문 나는 영어 (또는 다른 언어) 지역 형식으로 설정된 창을 사용하더라도 오후를 아랍어 또는 특정 언어로 사용하고 싶습니다.

아랍어 예를위한 Soution :

DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE")); 

// 23:12시

시스템이 영어 지역 형식으로 설정된 경우 이벤트. 다른 언어 형식으로 원하면 "ar-AE"를 변경할 수 있습니다. 각 언어의 목록과 형식이 있습니다.

예 :

ar          ar-SA       Arabic
ar-BH       ar-BH       Arabic (Bahrain)
ar-DZ       ar-DZ       Arabic (Algeria)
ar-EG       ar-EG       Arabic (Egypt)

big list...

다른 질문이 있으면 알려주세요.


"11:12 PM"을보고 싶으십니까? 귀하의 답변이 불완전하다고 생각합니다.
Fjodr

18

나는 이것이 매우 늦게 보일 수도 있다는 것을 알고 있습니다. 그러나 그것은 누군가를 도울 수 있습니다.

나는 날짜의 AM PM 부분을 얻고 싶었고 Andy가 조언 한 것을 사용했다.

dateTime.ToString("tt");

나는 그 부분을 사용하여 파일을 저장하기위한 경로를 구성했다. 나는 AM이나 PM을 얻을 것이라는 가정을 세웠다.

그러나 문화가 영어가 아닌 PC를 사용했을 때 .. (내 경우에는 ARABIC) .. 내 응용 프로그램이 "tt"형식이 AM이나 PM (م 또는 ص)이 아닌 새로운 것을 반환하는 경우에 실패했습니다.

이에 대한 해결책은 다음과 같이 두 번째 인수를 추가하여 문화를 무시하는 것이 었습니다.

dateTime.ToString("tt", CultureInfo.InvariantCulture);

.. 물론 추가해야합니다 : using System.Globalization; ur 파일 위에 누군가 도움이되기를 바랍니다. :)


3
오늘 도움이 된 것을 추가해 주셔서 감사합니다. 개발자 환경에서 AM을 받고 원격 서버에서 AM을 얻었 으며이 게시물을 읽을 때까지 Google의 도움이 없었습니다. Dotnetpearls조차도 "tt 출력에 마침표가 없습니다. AM 또는 PM에 마침표가 필요한 경우 문자열을 조작해야합니다." 내 경우에 어느 것이 완전히 사실이 아니
었는가

13

꽤 간단합니다

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM

10
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

예를 들어 날짜 시간 형식을 지정하는 더 좋은 방법이 있습니다.


@ChrisF가 제공 한 링크를 참조하십시오. 기본적으로 datetime 객체에서 ToString 메서드를 사용하여 형식을 전달할 수 있습니다. 이렇게하면 코드 예제에서와 같이 datetime.ToString을 여러 번 호출하지 않습니다.
Kevin Holditch

2
이것이 추한 것처럼 보일 수도 있지만, 다른 문화를 뒤섞는 것보다 훨씬 간단하고 일관된 방법입니다. 예를 들어 많은 문화권에서는 24 시간 내에 시간이 표시되고 AM / PM을 전혀 포함하지 않으며 ToString ( "tt")은 빈 문자열을 생성합니다.
nathanchere


4

같은 것 bool isPM = GetHour() > 11. 그러나 날짜를 문자열로 형식화하려면 직접 할 필요가 없습니다. 날짜 형식 기능을 사용하십시오 .


1
솔직히 isPM () 메소드조차 보여주지 않을 것입니다. 유일한 합법적 형식으로 날짜 시간 개체에 대한 방법은 포매터를 사용하고 있습니다.
richb01

@ richb01 동의하지 않습니다. 유일한 안전한 방법은 am / pm을 전혀 사용하지 않고 24 시간 형식을 사용하는 것입니다. 항상 불변 문화를 추가하거나 수동으로 수행하십시오. "am"과 "pm"은 독일어로 채워져 있지 않으며 비어 있습니다. 누군가가 String.Format ( "{0 : hh : mm tt}", DateTime.Now)를 작성하면 단순히 잘못된 시간을 얻습니다
Christoph

1

이 방법으로 테스트 할 수 있습니다

Console.WriteLine(DateTime.Now.ToString("tt "));

출력은 다음과 같습니다.

AM

또는

PM

1
허용되는 답변의 코드를 사용하고 있다는 것을 알고 있습니까?
Thomas Ayoub

친애하는 @ThomasAyoub, 작성된 코드는 프로젝트 소스 라인에서 가져온 것입니다. 지금 작동하고 있습니다.
yazarloo

죄송합니다. 특히 다음을 소개하기 때문에 매우 좋지 않은 답변입니다.Now
Wolf

0

다음은 시간 형식을 작성하고 (hh:mm:ss tt)원하는 경우 별도로 표시 할 수있는 더 쉬운 방법 입니다.

string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00") + DateTime.Now.ToString(" tt");

또는 단순히 :

 DateTime.Now.ToString("hh:mm:ss tt")

0

@ 앤디의 대답은 괜찮습니다. 그러나 24 시간 형식없이 시간을 표시하려면 다음과 같이 따라갈 수 있습니다

string dateTime = DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture);

그 후 "10:35:20 PM"또는 "10:35:20 AM"과 같은 시간을 가져야합니다.


-1
string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];

-2

예제 코드는 다음과 같습니다.

DateTime time = DateTime.Now;
string AM_PM;
AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);

2
이것은 신뢰할 수있는 솔루션이 아닙니다. ToLongTimeString()현재 스레드 문화권에 따라 값을 반환합니다. 그리고 다른 답변에 주어진 유사한 솔루션의 일부는 달리,이 코드 것이다 당신의 스레드 문화를 설정하는 경우조차 일 InvariantCulture때문에 불변 문화의 LongTimePattern의 반환 값을 결정하는 것입니다 - 어떤 ToLongTimeString()-is을 HH:mm:ss.
Joe Farrell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.