C#を使用して、タイムスパン値を「hh:mmAm / 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 2015

time.ToShortTimeString()は、午後3時の前の0を維持しません。time.ToString( "hh:mm tt")が処理します
Souvik Basu 2016

日付のないTimeSpanが欲しいのですが、問題ではないかもしれませんが、今日の日付をバインドし、それは適切ではありません。それにAM / PMを追加する方法がわからない:(
QMaster

13

文字列形式を使用することで非常に簡単

オン .ToSTring("") :

  • 「hh」を使用する場合->> 01から12までの12時間制を使用する時間。

  • 「HH」を使用する場合->> 00から23までの24時間時計を使用する時間。

  • 「tt」を追加した場合->> Am / Pm指定子。

23:12から11:12Pmへの変換の例:

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:12duと表示されます。

Windowsの地域と言語->現在の形式(コンボボックス)の下のWindowsコントロールパネルで異なる形式を変更して変更できます...適用してアプリの再構築(実行)を行い、iamが話していることを確認します。

それで、現在のシステムの文化が英語に設定されていない場合、誰が英語のイベントでAmとPmの単語を強制的に表示できますか?

2行追加するだけで簡単:->

最初のステップ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 =>デフォルトの英語形式を使用します。

別の質問英語(または他の言語)の地域形式に設定されたウィンドウを使用している場合でも、午後をアラビア語または特定の言語にしたいですか?

アラビア語の例の解決策:

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」を変更できます。各言語とその形式のリストがあります。

例:arar-SAアラビア語ar-BHar-BHアラビア語(バーレーン)ar-DZ ar-DZアラビア語(アルジェリア)ar-EG ar-EGアラビア語(エジプト)


5
TimeSpanについて尋ねられた質問。この答えはDateTimeに対するものです。
テレム

11

あなたは追加することができますTimeSpanDateTime、たとえば:

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

デモ:http//ideone.com/veJ6tT

04:00 PM

標準の日付と時刻の形式の文字列


ありがとう、私が試した時間の後11:57 pm、これはTimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
うまくいき

10
string displayValue="03:00 AM";

これは特定の時点であり、期間(TimeSpan)ではありません。

したがって、基本的な設計または仮定に問題があります。

使用したい場合は、最初に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;

いいえ、のTimeSpanの間の差を記録することができない、それは4時の値を有することができるが、表現はバイナリである16:004 pm


11
DateTime.TimeOfDay返すのは残念ですTimeSpan-マイクロソフトはあなたをこのデザインに導きます:(
Jon Skeet

2
@JonSkeetそれが最悪のデザインであるかどうかはわかりません(そして、野田での作業を考えると、敬意を表して、あなたがこの問題に夢中になっていることを知っています)、それは解釈の限界を理解することの問題です。親戚の概念はありませんDateTime。もしあれば、これ( "03:00 AM")は単にそのインスタンスになります。ただし、ほとんどのユースケースでは、その設計(相対DateTime)が問題を過度に複雑にすることがわかります(もちろん、これは、日付、時刻、絶対的かどうかにかかわらず、非常に特定の作業を行うのをより複雑にするという犠牲を払っています、タイムゾーンなど)
casperOne 2012年

7
@casperOne:基本的には、1つのタイプを使用して、論理的に別のタイプに格納される情報を表します。これは、目を細めてみると、同じように見えるからです。私はDateTimeそれ以上の意味をオーバーロードすることを提案しません(それはすでに十分に悪いです)。「時刻」を表すタイプがあるはずです。もちろん、これは私がNodaTimeで実装したものとまったく同じです。たくさんの異なる概念を少数のタイプに詰め込もうとすると、このような問題が発生することになります。
Jon Skeet 2012年

1
理由を説明しているので、この答えは素晴らしいです、問題を修正する方法だけでなく、TimeSpanがそのように動作です。実際にそこに三種類でなければなりません:DateTimeTimeOfDayDate
テレム

03:00 AM「特定の時点」ではありません。それは「1日のポイント」です。
アレックス

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
これが正直な答えです
toddmo 2016年

9

あなたは取得する必要があります DateTimeからオブジェクトますTimeSpan。そうすれば、簡単にフォーマットできます。

考えられる解決策の1つは、時間値がゼロの任意の日付にタイムスパンを追加することです。

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

出力値は"03:00 AM"(英語ロケールの場合)になります。


6

AM / PMをに追加することはできませんTimeSpan。とにかくTimaSpan値をに関連付ける必要がありますDateTime、時刻を12時間制で表示する場合ます。

TimeSpan時間間隔について話しているため、12時間形式での使用は意図されていません。ここで。

ドキュメントに記載されているように;

TimeSpanオブジェクトが表す時間間隔として測定される(時刻または経過時間の持続時間)正または負の第二の日、時間、分、秒、分画の数。このTimeSpan構造を使用して時刻を表すこともできますが、時刻が特定の日付と無関係である場合に限ります。それ以外の場合、DateTimeまたはDateTimeOffset代わりに構造を使用する必要があります。

また、MicrosoftDocsは次のように説明しています。

TimeSpan値は、のように表すことができる[-]d.hh:mm:ss.ffオプションのマイナス記号は、負の時間間隔を示し、ここで、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にも
注意する必要がありますプロパティDateTimeは、TimeSpanであることに

時間間隔午前0時から経過した日の割合を表します。


3

タイムスパンをDateTimeに解析してから、Format( "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.