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");
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:00
과 4 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
컴포넌트는 일hh
A의 측정 시간이며 24 시간 ,mm
분,ss
초이고,ff
두번째의 분수이다.
따라서이 경우 다음과 같이 AM / PM을 사용하여 표시 할 수 있습니다.
TimeSpan storedTime = new TimeSpan(03,00,00);
string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");
사이드 참고 :
또한주의해야 TimeOfDay의 의 속성 DateTime
A는 TimeSpan
그것을 나타내고,
시간 간격 자정 이후 경과 한 날의 비율을 나타낸다.