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

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

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을 어떻게 얻을 수 있습니까?



답변

어때요?

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


답변

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

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

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

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


답변

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

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

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


답변

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

의 위에 .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...

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


답변

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

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

dateTime.ToString("tt");

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

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

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

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

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


답변

꽤 간단합니다

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


답변

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

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