[c#] C #을 사용하여 시간 범위 값을 “hh : mm Am / Pm”형식으로 변환

System.TimeSpan다음과 같이 변수 유형에 저장된 값이 있습니다.

System.TimeSpan storedTime = 03:00:00;

String다음과 같이 다른 유형의 변수에 다시 저장할 수 있습니까 ?

String displayValue = "03:00 AM";

그리고 storedTime변수의 값이

storedTime = 16:00:00;

다음으로 변환해야합니다.

String displayValue = "04:00 PM";



답변

날짜에 시간 범위를 추가하면됩니다.

TimeSpan timespan = new TimeSpan(03,00,00);
DateTime time = DateTime.Today.Add(timespan);
string displayTime = time.ToString("hh:mm tt"); // It will give "03:00 AM"


답변

문자열 형식을 사용하여 매우 간단합니다.

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

다른 언어를 사용하는 Windows에서 실행되는 동일한 코드, 특히 다른 문화 언어를 사용하는 창에서 실행되는 동일한 코드가 동일한 코드로 다른 결과를 생성하기 때문에 다른 것에 대해 신경 쓸 필요가없는 것은 시스템 문화입니다.

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

// 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 아랍어 ar-BH ar-BH 아랍어 (바레인) ar-DZ ar-DZ 아랍어 (알제리) ar-EG ar-EG 아랍어 (이집트)


답변

예를 들어 TimeSpan를에 추가 할 수 있습니다 DateTime.

TimeSpan span = TimeSpan.FromHours(16);
DateTime time = DateTime.Today + span;
String result = time.ToString("hh:mm tt");

데모 : http://ideone.com/veJ6tT

04:00 PM

표준 날짜 및 시간 형식 문자열


답변

string displayValue="03:00 AM";

이것은이다 시간에 지점 이 아닌 기간 (시간 범위).

따라서 기본 설계 또는 가정에 문제가 있습니다.

사용하려면 먼저 DateTime (특정 시점)으로 변환해야합니다. 원하는 문자열이되는 날짜 부분없이 DateTime의 형식을 지정할 수 있습니다.

TimeSpan t1 = ...;
DateTime d1 = DateTime.Today + t1;               // any date will do
string result = d1.ToString("hh:mm:ss tt");

storeTime 변수는 다음과 같은 값을 가질 수 있습니다.
storeTime=16:00:00;

아니, 시간 범위 사이의 차이를 기록 할 수 없습니다, 그것은 4시의 값을 가질 수 있지만, 표현은 이진 16:004 pm.


답변

여기에 기존 답변을 편승하여 수행합니다.

public static string ToShortTimeSafe(this TimeSpan timeSpan)
{
    return new DateTime().Add(timeSpan).ToShortTimeString();
}

public static string ToShortTimeSafe(this TimeSpan? timeSpan)
{
    return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe();
}


답변

당신은 DateTime당신의TimeSpan 가져와야하고 쉽게 서식을 지정할 수 있습니다.

한 가지 가능한 해결책은 시간 값이 0 인 날짜에 시간 범위를 추가하는 것입니다.

var timespan = new TimeSpan(3, 0, 0);
var output = new DateTime().Add(timespan).ToString("hh:mm tt");

출력 값은 "03:00 AM"(영어 로케일의 경우)입니다.


답변

당신은 추가 할 수 없습니다 AM / PM을 A를 TimeSpan. 어쨌든 12 시간 시계 형식으로 시간을 표시하려면 TimaSpan값 을와 연결해야 DateTime합니다.

TimeSpan여기서 시간 간격 에 대해 이야기하고 있기 때문에 12 시간 시계 형식과 함께 사용하기위한 것이 아닙니다 .

문서 에서 말했듯이 ;

TimeSpan객체가 나타내는 시간 간격 A와 측정된다 (시간이나 경과 시간의 기간) 양 또는 음 초 일, 시간, 분, 초 및 분획 번호. TimeSpan구조는 하루의 시간을 나타내는 데 사용할 수 있지만, 시간은 특정 날짜와 관련이없는 경우에만. 그렇지 않으면 DateTime또는 DateTimeOffset구조를 대신 사용해야합니다.

또한 Microsoft Docs 는 다음과 같이 설명합니다.

TimeSpan같은 값이 표현 될 수있다 [-]d.hh:mm:ss.ff선택적 마이너스 부호가 음의 시간 간격을 표시하는 경우, 제 1, d컴포넌트는 일 hhA의 측정 시간이며 24 시간 , mm분, ss초이고, ff두번째의 분수이다.

따라서이 경우 다음과 같이 AM / PM을 사용하여 표시 할 수 있습니다.

TimeSpan storedTime = new TimeSpan(03,00,00);
string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");

사이드 참고 :
또한주의해야 TimeOfDay의 의 속성 DateTimeA는 TimeSpan그것을 나타내고,

시간 간격 자정 이후 경과 한 날의 비율을 나타낸다.