今だけ人気マンガ100円レンタル特集♪

C#にて、他言語にローカライズした場合に、日付の書式エラーが発生します。

ローカライズ後に、日付の書式が"dd/MM/yyyy"に切り替わってしまうため、
起動時に「System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";」を設定するようにしています。

ローカライズ前は日付入力「12/02」としたとき「DateTime.TryParse」にて「2010/12/02」と正しく変換されましたが、
ローカライズ後はエラーになって正しく変換されませんでした。

そこで、DateTime.TryParseExactにてフォーマットを"MM/dd"に指定しても、「2010/02/12」と月日が逆で設定されるようになってしまいました。

入力値「12/02」に対して、日付が「2010/12/02」と表示できるようにする方法を教えてください。

A 回答 (2件)

TryParseExact のカルチャ指定は、どのような形でしょうか。


CultureInfo.CreateSpecificCulture("ja-JP")
みたいな形を指定しても、ダメでしょうか。

宇宙仮面の C# プログラミング 日時のフォーマット
http://msdn.microsoft.com/ja-jp/library/9h21f14e …

参考URL:http://msdn.microsoft.com/ja-jp/library/9h21f14e …
    • good
    • 0
この回答へのお礼

教えてくれてありがとうございます。
教えてくれた内容でできそうです。

お礼日時:2010/11/15 20:55

入力していない値を補完するのに、システムに頼るなんて。


入力された月日に対応する年を補完するのはアプリケーションの責任です。
今現在の年でよいのか、過去でなきゃいけないのか、未来なのか
その辺を判断して、アプリケーションで付加しましょう。

この回答への補足

入力していない値を補完するしくみをシステムでできるように、DateTime.TryParseのような機能があると思っていますが。。。

補足日時:2010/10/26 08:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

QC#でほかのファイルにある自作クラスを使用したい場合

最近Javaから移ってきたばかりのC#初心者です。
依然作ったことのあるほかのファイルにある自作クラスを
新しいファイルの自作クラスで使用したい場合、どうすれば
よいのでしょうか。
Form1.cs(8,7): error CS0246: 型または名前空間名 'Calc1' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
Form1.cs(12,19): error CS0246: 型または名前空間名 'Calc' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
上記のようなエラーが発生してしまいます。
なにとぞご助力をお願いいたします。

Aベストアンサー

#2>しかし、やはりうまくいきませんでした。
#1で言われているような、namespace, using 指定と参照設定でうまくいくと思うんですけど・

自作クラスを補足することはできますか?

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

QListViewコントロールでサムネイル画像を一覧表示するには?

VB初心者です。
.NET TIPSの中に「ListViewコントロールでサムネイル画像を一覧表示するには?」というものがありました
今回、それを利用してサムネイル一覧の表示をしようとして行き詰りました。

作りたいのは以下のものです
○決まったサイズの画像(bitmap)を表示し、その下にファイル名(フルパスでは無い)を表示し、更にその下に元の画像のサイズを表示するようなものを作成したいのですが、作成可能でしょうか?
また、作成可能な場合、どういった方法で作成したら良いか教えて下さい。
行き詰ったのは、第一段階の、サムネイル画像のしたのファイル名の所です。
よく分からずに
ListView1.Items.Add(bmpFiles(i), i)の所を
Dim bmpFileName As String = _
Path.GetFileNameWithoutExtension(bmpFiles(i))
ListView1.Items.Add(bmpFileName)
bmpFileName(ファイル名のみ)に変更したら、ファイル名は表示されるのですが、画像が表示されませんでした。

次に両方書いたのですが画像の下にフルパスその横にファイル名が表示されます。
Dim bmpFileName As String = _
Path.GetFileNameWithoutExtension(bmpFiles(i))
ListView1.Items.Add(bmpFiles(i), i)
ListView1.Items.Add(bmpFileName)
色々調べてみたのですが、思ったような記述が無かったのでここで質問させて頂きました。
拙い質問なので分かり難いかと思いますがアドバイスをよろしくお願いいたします。

VB初心者です。
.NET TIPSの中に「ListViewコントロールでサムネイル画像を一覧表示するには?」というものがありました
今回、それを利用してサムネイル一覧の表示をしようとして行き詰りました。

作りたいのは以下のものです
○決まったサイズの画像(bitmap)を表示し、その下にファイル名(フルパスでは無い)を表示し、更にその下に元の画像のサイズを表示するようなものを作成したいのですが、作成可能でしょうか?
また、作成可能な場合、どういった方法で作成したら良いか教えて下さい。
行き詰っ...続きを読む

Aベストアンサー

n-junです。

画像を表示して、そこにファイル名と画像の(幅と高さ)を表示でしょうか?

ListView1.Items.Add(System.IO.Path.GetFileName(jpgFiles(i)) & vbLf & "幅:" & original.Width _
& " 高さ:" & original.Height, i)

こんな感じなら出来ましたけど、どうでしょう?

Qチェックボックスを操作できないようにしたいです VB.NET

チェックボックスのCheckedの状態をユーザーによるクリックや
スペースキーの押下で変更出来ないようにしたいです。
Checked_Changeイベントでユーザーによって変更されたのか
プログラムで変更されたのか判断してユーザーによる変更の場合は
チェックの状態をクリック前の状態に戻して、
Checked_Changeイベントを抜け出したいのですが
どのような方法でやればよいでしょうか?

ご教授頂けると幸いです。よろしくお願いいたします。

Aベストアンサー

WindowsFormアプリでしょうか ・・・ 開発(実行)環境の明示をしましょう

KeyPressやMousDownなどでフラグをセット
CheckedChangedイベントでフラグを参照して修正する方向かと ・・・

フォームクラスの変数として
Dim bCheck, bFlag as Boolean
を宣言

FromのLoadイベントなどで
bCheck = CheckBox1.Checked
bFlag = False
と初期化しておきます

CheckBoxのCheckedChangedイベントで
if bFlag then
  ' フラグが立っているときは元のデータに戻す
  bFlag = False
  CheckBox1.Checked = bCheck
end if

CheckBoxのMouseDownイベントに
' ボタンの判断をするのであれば e.Buttonを使って判断します
bFlag = True

CheckBoxのKeyPressイベントに
if e.KeyChar = Chr(32) then
  bFlag = True
end if

といった具合でしょう ・・・

WindowsFormアプリでしょうか ・・・ 開発(実行)環境の明示をしましょう

KeyPressやMousDownなどでフラグをセット
CheckedChangedイベントでフラグを参照して修正する方向かと ・・・

フォームクラスの変数として
Dim bCheck, bFlag as Boolean
を宣言

FromのLoadイベントなどで
bCheck = CheckBox1.Checked
bFlag = False
と初期化しておきます

CheckBoxのCheckedChangedイベントで
if bFlag then
  ' フラグが立っているときは元のデータに戻す
  bFlag = False
  CheckBox1.Checke...続きを読む

Qテーブル名を[]でくくらないとエラーになってしまう

テーブル名を[]でくくらないとエラーになってしまいます

sqlserver 2008 express edition を利用しているのですが

テーブル名 やカラム名に[]でくくってSQL文を実行しないと
エラーが出てしまいます
例えば

select * from [table]  の様にしないといけません
これを
select * from table で実行できるようにしたいのです
どうしたらいいのでしょうか

会社ではsqlserver2005を利用しているので
2008からは[]でくくる必要になったのでしょうか

それとも初期設定で何かしないといけないのでしょうか
設定方法を教えて下さい

sqlserver management studio2008もインストール済みです

Aベストアンサー

「table」はSQLの予約語です。そのため初期設定などで、「table」をそのままSQL文に使用することは出来ません。これは他のRDBも同様です。
SQL SERVERでは[]で括ることで、予約語をオブジェクト名に出来ますが、おすすめは出来ません。
なお、ANSI/ISOの標準規格では「"(ダブルクォーテーション)」で括ることで、同様にエラーを回避できます。SQL SERVERでも初期設定でANSI/ISOと同様に「"」で括るモードにすることは出来ますが、それでも予約語である以上何らかの対応は必要です。

> 会社ではsqlserver2005を利用しているので
> 2008からは[]でくくる必要になったのでしょうか

そんなことはないはずです。

Q【C#】リソースファイルの埋め込みと書き出し

C#初心者です。

アクセスの空データベースファイル(.accdb)を.exeに埋め込んで、必要に応じてファイルとして出力したいのですが、その方法がわかりません。

埋め込み方法は画像ファイルと同じように[追加]→[既存の項目]からリソースとして読み込み、ビルドアクションプロパティを[埋め込まれたリソース]に設定すれば、それでよいのでしょうか?

また、埋め込んだファイルをファイルとして出力する場合はどうすればよいのでしょうか?

本当ならわざわざリソースとして埋め込むのではなく、空の.accdbをプログラムで生成できればよいのですが、もしご存知でしたらそれもご教示ください。

よろしくお願いします。

Aベストアンサー

Google さんに聞けばすぐに解決しちゃうから既に解決済みか?

以下 Visual Studio 2012 の操作。

リソースの追加方法
1. プロジェクトのプロパティで [リソース] タブを選択。
2. [リソースの追加] ボタンの右側にある下向き矢印をクリックして [既存のファイルを追加] をクリック。
3. 目的の Access DB ファイルを選択して [開く] をクリック。
4. データ ソース構成ウィザードが起動してしまうので [キャンセル] をクリック。
5. リソース一覧に追加された DB ファイルの名前が気に食わなければプロパティの (Name) で変更する。既定値はファイル名の拡張子を除いた部分になっていて、プログラムからはこの名前でリソースにアクセスする。
6. プロジェクトのプロパティを閉じる。
7. プロジェクトの [Resources] フォルダーに Access DB ファイルが追加されていて、[出力ディレクトリに常にコピーする] になっているので、"コピーしない" に変更する。


リソースからバイナリを取得してファイルに書き出す方法
(リソースには Properties.Resources クラスを使ってアクセスする)
1. リソースをバイト配列に読み込む。
ex.) "test" という名前のリソースだった場合
byte[] dbFile = Properties.Resources.test;

2. バイト配列をファイルに書き出す。
System.IO.File.WriteAllBytes("d:\\hoge.accdb", dbFile);

以上。

Google さんに聞けばすぐに解決しちゃうから既に解決済みか?

以下 Visual Studio 2012 の操作。

リソースの追加方法
1. プロジェクトのプロパティで [リソース] タブを選択。
2. [リソースの追加] ボタンの右側にある下向き矢印をクリックして [既存のファイルを追加] をクリック。
3. 目的の Access DB ファイルを選択して [開く] をクリック。
4. データ ソース構成ウィザードが起動してしまうので [キャンセル] をクリック。
5. リソース一覧に追加された DB ファイルの名前が気に食わなければプロパティの ...続きを読む

Qc#でコマンドプロンプトを実行する方法

コマンドプロンプト上から音楽ファイルの変換が出来るffmpegを利用して
C#プログラムを作ろうと思い、下記のサイトを参考にしてc#プログラムを作りコマンドを入力してみたのですがうまくいきません。
しかし、同じコマンドをコマンドプロンプトを手動で開いて打ち込むと成功します。

参考にしたサイト:http://dobon.net/vb/dotnet/process/standardoutput.html
入力したコマンド:"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
 ※コマンドの-b:a 320kの表記は320kbpsのビットレートで変換するコードです。
 ※a.m4aをa.mp3に320kbpsのビットレートで変換するコマンドになります。

現状をまとめると以下のようになります。
(1)コマンドプロンプトを手動で起動して、以下のコマンドを打ち込むとうまく変換してくれる。
"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
(2)しかしこのコマンドを下記のコードで実行すると処理が行われない。
(3)そうなると下記のコード自体に問題があるように思われるが、
下記のコードで"dir c:\"など簡単なコマンドを実行すると成功する。

ダブルクオテーション(")やスペースなどに問題があるのかと思いいろいろと試してみましたがダメでした。
どうすれば下記のコードで"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"のようなコマンドを実行出来るのでしょうか?
実行する方法、もしくは違うコードで実行する方法などを知っておられる方、ぜひご教授ください!非常に困っております。


---------------------------------------------------------------------------------------------------
■コマンドプロンプトをC#上から実行するコード
http://dobon.net/vb/dotnet/process/standardoutput.htmlのコードの丸写し
---------------------------------------------------------------------------------------------------
//Processオブジェクトを作成
System.Diagnostics.Process p = new System.Diagnostics.Process();

//ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
//出力を読み取れるようにする
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = false;
//ウィンドウを表示しないようにする
p.StartInfo.CreateNoWindow = true;
//コマンドラインを指定("/c"は実行後閉じるために必要)


//○成功する
p.StartInfo.Arguments = "dir c:\";
//×失敗する
p.StartInfo.Arguments = "\"E:/ffmpeg.exe\" -i \"E:/a.m4a\" -b:a 320k \"E:/a.mp3\";


//起動
p.Start();
//出力を読み取る
string results = p.StandardOutput.ReadToEnd();
//プロセス終了まで待機する
//WaitForExitはReadToEndの後である必要がある
//(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit();
p.Close();

//出力された結果を表示
Console.WriteLine(results);
---------------------------------------------------------------------------------------------------

コマンドプロンプト上から音楽ファイルの変換が出来るffmpegを利用して
C#プログラムを作ろうと思い、下記のサイトを参考にしてc#プログラムを作りコマンドを入力してみたのですがうまくいきません。
しかし、同じコマンドをコマンドプロンプトを手動で開いて打ち込むと成功します。

参考にしたサイト:http://dobon.net/vb/dotnet/process/standardoutput.html
入力したコマンド:"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
 ※コマンドの-b:a 320kの表記は320kbpsのビットレートで変換するコー...続きを読む

Aベストアンサー

>うまくいきません。

「なにが」「どう」「いまくいかない」んでしょうか?

プロセス起動した後に無反応になる?
プロセス終了した後に表示されるべきメッセージが表示されない?
プロセス起動できない?
起動したffmpeg.exeが終了しても戻ってこない?

参考ページではcmd.exeに/cオプションを指定しているようですが、
変更されたソースでは指定していないようで…。
その場合、
p.WaitForExit();
でちゃんと戻ってこれるんですかね?
# 起動したcmd.exe自体は終了していないはずですが…
# /Cも/Kも無かった場合ってどういう動作するんですかね?(Windows7 Pro 64Bitでcmd dirとしたら無視されてしまいましたが)

cmd.exe経由でなくても、必要条件満たせばffmpeg.exeの起動は可能と思いますよ。
ffmpeg.exeを利用するフロントエンドアプリなんかもそうしているでしょうし。
「ffmpeg.exe フロントエンド」で検索してみるとアプリは見つかるかと。


人気Q&Aランキング