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


204

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

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()
    + " "
    ????????????????
}

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


24
をフォーマットする方法はこれよりもはるかに優れていますDateTimemsdn.microsoft.com/en-us/library/8kb3ddd4.aspxを
ChrisF

使用するだけdateTime.ToString("tt");
デビッドイエス

回答:


368

どうですか:

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

3
これを正しく行うには、新しいSystem.Globalization.CultureInfo( "en-US")を追加する必要があります(USコンテキストでスレッドをまだ実行していない場合)
thomas

1
@thomas-良い点。今すぐ編集して指定CultureInfo.InvariantCulture
Andy

8
ToString("tt", System.Globalization.CultureInfo.InvariantCulture)
IndieTech Solutions 2016

これは、日付からAM / PMを取得するためのものです。しかし、いつの日かAMをPMに変更したい場合。その後、私は何をすべきですか?
Ajay Sharma

2
@AjaySharma形式の評価の12時間前に追加してください。DateTime.Now.AddHours(12).ToString("tt", CultureInfo.InvariantCulture)
AXMIM 2017年

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

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

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

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


8
これは、ケース低くするべきであるhhビット無意味である午前と午後で24時間の時間であなたの現在の表現の出力として
愛されていない

1
@LukeMcGregor私はあなたの提案に従って答えを修正しました。
ジョーンズ博士

46

DateTime常に「アメリカ」(グレゴリオ)暦の内部でなければなりません。だからあなたがするなら

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

あなたははるかに少ない行であなたが望むものを得るはずです。


33

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

オン .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م

مはEvening(مساءの最初のレター)を意味します。

別のシステムカルチャでは、Windowsの地域と言語のオプションで何が設定されているかによって異なり、// 23:12 duと表示されます。

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 =>デフォルトの英語形式を使用。

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

アラビア語の例の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       Arabic
ar-BH       ar-BH       Arabic (Bahrain)
ar-DZ       ar-DZ       Arabic (Algeria)
ar-EG       ar-EG       Arabic (Egypt)

big list...

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


「午後11時12分」を見たい場合は?あなたの答えは不完全だと思います。
Fjodr

18

これは非常に遅いように見えるかもしれませんが、誰かの助けになるかもしれません。

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

dateTime.ToString("tt");

私はその部分を使用して、ファイルを保存するためのパスを作成しました。AMまたはPMのいずれかのみを取得するという想定を構築しました。

しかし、その文化が英語ではないPCを使用したとき(私の場合はアラビア語)..「tt」という形式がAMでもPMでもない新しいもの(مまたはص)を返したため、アプリケーションが失敗しました。

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

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

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


3
これを追加していただきありがとうございます。今日は役に立ちました。開発環境でAMを取得し、リモートサーバーでAMを取得していました。この投稿を読むまで、Googleからの多大な支援はありませんでした。Dotnetpearlsでさえ、「ttの出力にはピリオドはありません。AMまたはPMでピリオドが必要な場合は、文字列を操作する必要があります。」もちろん、私の場合、どちらが完全に
正しくなかったのか

13

かなりシンプル

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM

10
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

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


@ChrisFが上記に示したリンクを参照してください。基本的には、datetimeオブジェクトのToStringメソッドを使用して、フォーマットを渡すことができます。この方法では、コード例で行っているように、datetime.ToStringを複数回呼び出さないでください。
Kevin Holditch、2011年

2
これは見た目が醜いかもしれませんが、異なる文化をいじるよりもはるかに単純で一貫した方法です。たとえば、多くのカルチャは24時間で時間を示し、AM / PMをまったく含まず、ToString( "tt")は空の文字列を生成します。
nathanchere


4

のようなものbool isPM = GetHour() > 11。しかし、日付を文字列にフォーマットする場合は、自分でこれを行う必要はありません。そのために日付フォーマット関数を使用します


1
正直なところ、私はisPM()メソッドも表示しません。唯一の合法的なフォーマットのDateTimeオブジェクトへの道は、フォーマッタを使用しています。
richb01

@ richb01同意しない。唯一の安全な方法は、午前/午後をまったく使用せず、24時間形式を使用し、常に不変カルチャを追加するか、手動で行うことです。"am"と "pm"はドイツ語などでは入力されず、空になっています。誰かがString.Format( "{0:hh:mm tt}"、DateTime.Now)を書き込んだ場合、単に間違った時間になります
Christoph

1

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

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

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

AM

または

PM

1
受け入れられた回答のコードを使用していることをご存知ですか?
Thomas Ayoub、2016年

@ThomasAyoub様書かれたコードは私のプロジェクトソースの行からのものです。それは今働いています。
yazarloo 2016年

申し訳ありませんが、これは非常に貧弱な回答です。特に、導入するためですNow
Wolf

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")

0

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

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

その後、「10:35:20 PM」または「10:35:20 AM」のような時間になるはずです。


-1
string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];

-2

ここにいくつかのサンプルコードがあります:

DateTime time = DateTime.Now;
string AM_PM;
AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);

2
これは信頼できるソリューションではありません。ToLongTimeString()現在のスレッドカルチャに基づいて値を返します。そして、他の回答に与えられた同様のソリューションの一部とは異なり、このコードはしませんでも、仕事、あなたはにスレッド文化を設定した場合、InvariantCultureインバリアントカルチャのため、LongTimePatternの戻り値を決定するものである-which ToLongTimeString()-isをHH:mm:ss
Joe Farrell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.