92

次のような型の変数に値が格納されてSystem.TimeSpanいます。

System.TimeSpan storedTime = 03:00:00;

次のようにタイプの別の変数に再格納できStringますか?

String displayValue = "03:00 AM";

そして、storedTime変数の値が

storedTime = 16:00:00;

次に、次のように変換する必要があります。

String displayValue = "04:00 PM";
4

13 に答える 13

207

これを行うには、日付にタイムスパンを追加します。

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"
于 2012-10-24T07:32:11.930 に答える
15

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

の上.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();

ちょっと待ってください。キャッチがあります。システムCulture!!、特に異なるカルチャ言語で異なる言語に設定されたウィンドウで実行された同じコードは、異なる結果を生成します。

たとえば、アラビア語に設定されたウィンドウでは、結果は次のようになります。

// 23:12م

مは夕方(مساءの最初の文字)を意味します。

ドイツ語に設定されたウィンドウでは、//23:12duと表示されると思います。

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

では、現在のシステムのカルチャが英語に設定されていない場合、英語のイベントで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アラビア語(エジプト)....。

于 2015-07-23T00:42:52.313 に答える
12

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

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

于 2012-10-24T07:30:35.690 に答える
12

ここで既存の答えに便乗する:

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();
}
于 2014-08-15T15:21:05.407 に答える
11
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;

いいえ、4時の値をとることができますが、表現はバイナリであり、TimeSpanはとの差を記録できませ16:004 pm

于 2012-10-24T07:30:50.993 に答える
9

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

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

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

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

于 2012-10-24T07:33:54.177 に答える
6

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

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

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

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

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

TimeSpan値はとして表すことができます。[-]d.hh:mm:ss.ffここで、オプションのマイナス記号は負の時間間隔を示し、dコンポーネントは日、24時間制hhで測定した時間、分、秒、秒の小数部です。mmssff

したがって、この場合、AM/PMを使用して次のように表示できます。

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


補足:のTimeOfDayプロパティは、であることに
注意してください。DateTimeTimeSpan

真夜中から経過した日の割合を表す時間間隔。

于 2017-10-19T04:29:50.973 に答える
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"
于 2012-10-24T07:32:49.560 に答える
2

あなたはこれを試すことができます:

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

必要に応じて、hhまたはmmまたはssまたはttを削除できます。ここで、hhは12時間形式の時間、mmは分、ssは秒、ttはAM/PMです。

于 2016-08-06T12:43:32.407 に答える
2

タイムスパン形式の制限を回避するには、日時に変換します。最も単純な式は次のようになります。

// Where value is a TimeSpan...
(new DateTime() + value).ToString("hh:mm tt");
于 2021-07-12T11:37:06.017 に答える
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;
                }
于 2015-07-15T09:30:01.150 に答える
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
于 2012-10-24T07:33:35.237 に答える
0

この状況は一般的であるのと同じくらい厄介なので...私はヘルパークラスを作成し、それをNuGetパッケージでリリースしました。これはプライベートメソッドである可能性があり、MVCビューとバックエンドC#コードで使用できます。

public static string AsTimeOfDay(TimeSpan timeSpan, TimeSpanFormat timeSpanFormat = TimeSpanFormat.AmPm)
        {
            int hours = timeSpan.Hours;
            int minutes = timeSpan.Minutes;
            string AmOrPm = "AM";
            string returnValue = string.Empty;

            if (timeSpanFormat == TimeSpanFormat.AmPm)
            {
                if (hours >= 12)
                {
                    AmOrPm = "PM";
                }

                if (hours > 12)
                {
                    hours -= 12;
                }

                TimeSpan timeSpanAmPm = new TimeSpan(hours, minutes, 0);

                returnValue = timeSpanAmPm.ToString(@"h\:mm") + " " + AmOrPm;
            }
            else
            {
                returnValue = timeSpan.ToString(@"h\:mm");
            }

            return returnValue;
        }

ここに画像の説明を入力してください

于 2021-05-28T13:43:42.073 に答える