240

問題のコードは以下のとおりです。

public static string ChangePersianDate(DateTime dateTime)
{
    System.Globalization.GregorianCalendar PC = new System.Globalization.GregorianCalendar();
    PC.CalendarType = System.Globalization.GregorianCalendarTypes.USEnglish;
    return
    PC.GetYear(dateTime).ToString()
    + "/"
    + PC.GetMonth(dateTime).ToString()
    + "/"
    + PC.GetDayOfMonth(dateTime).ToString()
    + ""
    + PC.GetHour(dateTime).ToString()
    + ":"
    + PC.GetMinute(dateTime).ToString()
    + ":"
    + PC.GetSecond(dateTime).ToString()
    + " "
    ????????????????
}

値からAM/PMを取得するにはどうすればよいdateTimeですか?

4

15 に答える 15

406

どうですか:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
于 2011-10-24T12:06:44.027 に答える
127
string.Format("{0:hh:mm:ss tt}", DateTime.Now)

これにより、時間の文字列値が得られます。ttは午前/午後を追加する必要があります。

関連トピックもご覧ください。

現在の時刻をどのように取得しますか?

于 2011-10-24T12:05:50.123 に答える
48

DateTime常に「アメリカ」(グレゴリオ暦)カレンダーの内部にある必要があります。だからあなたがするなら

var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));

あなたはもっと少ない行であなたが望むものを手に入れるべきです。

于 2011-10-24T12:05:35.790 に答える
48

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

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

ちょっと待ってください。他のことを気にする必要があるのはシステムカルチャーだけではありません。他の言語のウィンドウで同じコードを実行すると、特に異なるカルチャ言語の場合、同じコードで異なる結果が生成されるためです。

アラビア語の言語文化に設定されたウィンドウの例は、次のように表示されます。

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

例:

ar          ar-SA       Arabic
ar-BH       ar-BH       Arabic (Bahrain)
ar-DZ       ar-DZ       Arabic (Algeria)
ar-EG       ar-EG       Arabic (Egypt)

big list...

別の質問がある場合はお知らせください。

于 2015-07-22T18:34:36.003 に答える
19

私はこれが非常に遅いように見えるかもしれないことを知っています..しかしそれはそこに誰かを助けるかもしれません

日付のAMPM部分を取得したかったので、Andyのアドバイスを使用しました。

dateTime.ToString("tt");

その部分を使用して、ファイルを保存するためのパスを作成しました。AMまたはPMのいずれかを取得し、それ以外は何も取得しないという前提を構築しました。

しかし、その文化が英語ではないPCを使用した場合..(私の場合はARABIC)..フォーマット "tt"がAMでもPM(مまたはص)でもない新しいものを返したため、アプリケーションが失敗しました。

したがって、これに対する修正は、次のように2番目の引数を追加してカルチャを無視することでした。

dateTime.ToString("tt", CultureInfo.InvariantCulture);

..もちろん、追加する必要があります:using System.Globalization; urファイルの上に私はそれが誰かを助けることを願っています:)

于 2014-02-03T03:49:33.743 に答える
15

その非常にシンプル

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM
于 2018-06-04T21:35:31.347 に答える
10
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

あなたの例では、日時をフォーマットするためのより良い方法があります。

于 2011-10-24T12:01:56.393 に答える
8

差出人:http ://www.csharp-examples.net/string-format-datetime/

string.Format("{0:t tt}", datetime);  // -> "P PM"  or "A AM"
于 2011-10-24T12:07:07.233 に答える
5

のようなものbool isPM = GetHour() > 11。ただし、日付を文字列にフォーマットする場合は、自分でフォーマットする必要はありません。そのために日付フォーマット機能を使用してください。

于 2011-10-24T12:00:38.190 に答える
2

@Andyの答えは大丈夫です。しかし、24時間形式なしで時間を表示したい場合は、このように従うことができます

string dateTime = DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture);

その後、「10:35:20PM」や「10:35:20AM」のような時間を取得する必要があります

于 2020-04-03T08:53:31.973 に答える
1

この方法でテストできます

Console.WriteLine(DateTime.Now.ToString("tt "));

出力は次のようになります。

AM

また

PM
于 2016-05-30T10:13:28.773 に答える
1

LongDateString Dateに時間を追加する場合は、次のようにフォーマットできます。

    DateTime date = DateTime.Now;
    string formattedDate = date.ToLongDateString(); 
    string formattedTime = date.ToShortTimeString();
    Label1.Text = "New Formatted Date: " + formattedDate + " " + formattedTime;

出力:

New Formatted Date: Monday, January 1, 1900 8:53 PM 
于 2020-10-20T12:58:24.257 に答える
1

もう1つのオプションは、正しいフォーマットを取得するために使用されるデフォルトのカルチャを変更することです。利点は、新しい形式がコード全体で使用されることです。

CultureInfo.CurrentCulture = new CultureInfo("Fr-fr");
Console.WriteLine(DateTime.Now.ToString("t")); // 14:08

var customCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
customCulture.DateTimeFormat.AMDesignator = "am";
customCulture.DateTimeFormat.PMDesignator = "pm";
customCulture.DateTimeFormat.ShortTimePattern = "HH:mm tt";
CultureInfo.CurrentCulture = customCulture;

Console.WriteLine(DateTime.Now.ToString("t")); // 14:08 pm
于 2021-03-11T13:15:54.030 に答える
0

(hh:mm:ss tt)必要に応じて、時間形式を記述して個別に表示する簡単な方法を次に示します。

string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00") + DateTime.Now.ToString(" tt");

または単に:

 DateTime.Now.ToString("hh:mm:ss tt")
于 2015-11-19T14:30:19.897 に答える
-2
string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];
于 2014-03-03T06:10:32.610 に答える