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


82

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

System.TimeSpan storedTime = 03:00:00;

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

String displayValue = "03:00 AM";

그리고 storedTime변수의 값이

storedTime = 16:00:00;

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

String displayValue = "04:00 PM";

답변:


191

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

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"

부트 스트랩 날짜 선택기 에서 기본 시간을 추가 할 수 datepicker value + TimeofDay있습니까? 예 : ?
Shaiju T 2015

1
이것은 항상 AM / PM 접두사가 있는 12 시간 시계 시간을 제공합니다. 결과가 주어진 문화를 따르도록하려면 ShortTimePattern대신 사용할 수 있습니다 .string displayTime = time.ToString("t" [, culture]);
Sphinxxx

1
아니면 그냥 전화 할 수 있습니다time.ToShortTimeString()
Mardok

time.ToShortTimeString ()은 03:00 PM에 선행 0을 유지하지 않습니다. time.ToString는 ( "HH : MM 고작")로 처리한다
Souvik 바수에게

날짜가없는 TimeSpan을 원합니다. 아마도 중요하지 않지만 오늘 날짜를 바인딩하고 적절하지 않습니다. like string.Format (@ "{0 : hh \ : mm \ : ss}", timespan)을 사용하는 것이 더 좋지만 저는 그렇지 않습니다. 't은 :( 것과 AM / PM을 추가하는 방법을 알고있다
에서 qmaster

13

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

의 위에 .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 아랍어 (이집트)


5
TimeSpan에 대한 질문입니다. 이 답변은 DateTime입니다.
thelem


10
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.


11
그것은 불행 DateTime.TimeOfDay수익률은 TimeSpan마이크로 소프트가 :(이 디자인에 당신을 리드 -
존 소총

2
@JonSkeet 나는 그것이 최악의 디자인이라는 것을 모릅니다. (노다에 대한 당신의 작업을 감안할 때 정중하게 당신이 문제에 대해 놀란다는 것을 알고 있습니다), 해석의 한계를 이해하는 문제입니다. 친척의 개념이 없습니다 DateTime. 만약 있다면 이것은 ( "03:00 AM") 단순히 그 인스턴스 일 것입니다. 그러나 대부분의 사용 사례에서 해당 디자인 (상대적 DateTime)이 문제를 지나치게 복잡하게 만들 수 있다는 것을 알 수 있습니다 (물론 이것은 날짜, 시간, 절대적이든 아니든 매우 구체적인 작업을 수행하기 위해 더 복잡하게 만드는 대가로 , 시간대 등)
casperOne

7
@casperOne : 근본적으로 그것은 논리적으로 다른 유형에 저장 될 정보를 표현하기 위해 하나의 유형을 사용하고 있습니다. 나는의 의미 과부하를 제시하지 않을 DateTime경우에도 더를 (이미 나쁜 충분하다). "시간"을 나타내는 유형이 있어야합니다. 물론 이것이 바로 제가 Noda Time에서 구현 한 것입니다. 많은 다른 개념을 적은 수의 유형으로 채우려 고 할 때마다 이와 같은 문제가 발생할 수 있습니다.
Jon Skeet

1
그것을 설명하기 때문에 대답은 대단한 이유는 타임 스팬이가하는 방식으로 작동 얼마나 문제를 해결하기보다는. 실제로 세 가지 유형이 있어야합니다. DateTime, TimeOfDayDate.
thelem

03:00 AM"특정 시점"이 아닙니다. 그것은 "하루의 포인트"입니다.
Alex

10

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

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();
}

3
이것은 sanest 답변입니다
toddmo

9

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

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

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

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


6

당신은 추가 할 수 없습니다 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그것을 나타내고,

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


3

시간 범위를 DateTime으로 구문 분석 한 다음 형식 ( "hh : mm : tt")을 사용합니다. 예를 들면.

TimeSpan ts = new TimeSpan(16, 00, 00);
DateTime dtTemp = DateTime.ParseExact(ts.ToString(), "HH:mm:ss", CultureInfo.InvariantCulture);
string str = dtTemp.ToString("hh:mm tt");

str 될거야:

str = "04:00 PM"

2

이것을 시도 할 수 있습니다.

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

필요에 따라 hh 또는 mm 또는 ss 또는 tt를 제거 할 수 있습니다. 여기서 hh는 12 시간 포 메이트의 시간, mm은 분, ss는 초, tt는 AM / PM입니다.


1
Parse timespan to DateTime. For Example.    
//The time will be "8.30 AM" or "10.00 PM" or any time like this format.
    public TimeSpan GetTimeSpanValue(string displayValue) 
        {   
            DateTime dateTime = DateTime.Now;
                if (displayValue.StartsWith("10") || displayValue.StartsWith("11") || displayValue.StartsWith("12"))
                          dateTime = DateTime.ParseExact(displayValue, "hh:mm tt", CultureInfo.InvariantCulture);
                    else
                          dateTime = DateTime.ParseExact(displayValue, "h:mm tt", CultureInfo.InvariantCulture);
                    return dateTime.TimeOfDay;
                }

0

먼저 시간 범위를 DateTime 구조로 변환해야합니다.

var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds)

그런 다음 값을 짧은 시간 형식의 문자열로 변환해야 합니다.

var result = dt.ToString("t"); // Convert to string using Short Time format
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.