問題のコードは以下の通りです。
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を取得する方法を教えてください。
どうですか?
dateTime.ToString("tt", CultureInfo.InvariantCulture);
string.Format("{0:hh:mm:ss tt}", DateTime.Now)
これはあなたに時間の文字列値を与えるべきです。午前/午後を追加する必要があります。
関連トピックも見てください。
DateTime
は常に内部的に "american"(グレゴリオ暦)のカレンダーの中にあるべきです。もしそうなら
var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));
あなたが望むものをもっと少ない行で手に入れるべきです。
文字列フォーマットを使うことでとても簡単
.ToSTring("") :
について
"hh"を使用した場合 - >> 1時間。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
「夕方」は「夕方」を意味します。
別のシステム文化では窓の地域や言語のオプションに設定されているものに依存し、それは// 23:12デュを表示します。
あなたは、地域と言語のウィンドウズの下のウィンドウズのコントロールパネル上の異なるフォーマットの間で変更することができます - >現在のフォーマット(コンボボックス)と変更...それはあなたのアプリの再構築(実行)を行います。
それでは、現在のシステムの文化が英語に設定されていない場合、誰が私が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 =>デフォルトの英語フォーマットを使用。
別の質問窓を英語(または他の言語)の地域形式に設定している場合でも、pmをアラビア語または特定の言語にしたいですか。
アラビア語の例:
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...
別の質問があるかどうか私に知らせてください。
私はこれが非常に遅いように思われるかもしれないことを知っています..しかしそれはそこに誰かを助けるかもしれません
私は日付のAM PM部分を取得したいので、Andyがアドバイスしたものを使いました。
dateTime.ToString("tt");
私は自分のファイルを保存するためのパスを構築するためにその部分を使用しました。私はAMまたはPMのいずれかを取得するという自分の仮定を構築しました。
しかし、その文化が英語ではないPCを使用した場合(私の場合はアラビア語)..フォーマット "tt"がAMでもPMでもないという新しい理由でアプリケーションが失敗しました。 。
したがって、これに対する修正は、次のように2番目の引数を追加してカルチャを無視することでした。
dateTime.ToString("tt", CultureInfo.InvariantCulture);
..もちろん、追加する必要があります。using System.Globalization; urファイルの上に私はそれが誰かに役立つことを願っています:)
そのとても単純な
Date someDate = new DateTime();
string timeOfDay = someDate.ToString("hh:mm tt");
// hh - shows hour and mm - shows minute - tt - shows AM or PM
から: http://www.csharp-examples.net/string-format-datetime/
string.Format("{0:t tt}", datetime); // -> "P PM" or "A AM"
+ PC.GetHour(datetime) > 11 ? "pm" : "am"
あなたの例のためにしかし日時をフォーマットするより良い方法があります。
bool isPM = GetHour() > 11
のようなもの。しかし、日付を文字列にフォーマットしたい場合は、これを自分で行う必要はありません。そのためには 日付フォーマット 関数を使用してください。
これでテストできます
Console.WriteLine(DateTime.Now.ToString("tt "));
出力は次のようになります。
AM
または
PM
これが時間フォーマット(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")