2011年05月15日

TwitterAPIのcreated_atをDateTimeに変換する方法(C#メモ)

TwitterAPIで取得したcreated_at(ステータス作成日時)は、「Wed Nov 18 18:36:34 +0000 2009」のような書式になっていて、そのままではC#のDateTime型に変換できません。
例えば下記のようにするとエラーになります。

string created_at = "Wed Nov 18 18:36:34 +0000 2009";
DateTime dt = DateTime.Parse( created_at );

そこでParseExactを使って書式指定をして変換します。

string created_at = "Wed Nov 18 18:36:34 +0000 2009";
DateTime dt = DateTime.ParseExact(
    created_at,
    "ddd MMM dd HH:mm:ss K yyyy",
    System.Globalization.DateTimeFormatInfo.InvariantInfo);

第一引数に変換する文字列(=TwitterAPIから取得したcreated_at),第二引数に書式,第三引数にカルチャ固有の書式情報を指定します。
書式についてはMSDNの『標準の DateTime 書式指定文字列』『カスタム DateTime 書式指定文字列』,あたりを参考にしてください。
“カルチャ固有の書式情報”というのは文化圏に依存する書式の情報のことです。例えば日本語環境だと「2009年11月18日 18:36:34」,英語環境だと「Wed, Nov 18, 2009 18:36:34」といった感じになります。 ここではInvariantInfo(=カルチャに依存しない)を設定しています。

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

タグ:Twitter C# DateTime
posted by among at 15:33 | Comment(0) | TrackBack(0) | C#

2011年04月29日

半透明のフォームの作り方(2つのフォームを重ねる)・ラスト

前回の続きです。

上に重ねるフォームを分からなくするため、色々設定します。
詳しくはコメントを参照してください。

また、半透明のフォームの移動に追従させるために、Moveイベントも追加しておきます。

private void Form1_Load(object sender, EventArgs e)
{
    Form2 f2 = new Form2();

    f2.ShowInTaskbar = false; // タスクバーに表示させない
    f2.ControlBox = false; // コントロールボックスを表示しない
    f2.FormBorderStyle = FormBorderStyle.None; // 枠線スタイル=枠線なし
    f2.Size = this.ClientSize; // Form2のサイズはForm1のクライアント領域のサイズ
    f2.StartPosition = FormStartPosition.Manual; // Form2の初期位置はLocationで指定
    f2.Location = this.PointToScreen(this.ClientRectangle.Location); // Form2の位置をForm1のクライアント領域にセット
    // 背景を塗る(this.BackColorだとコントロールの背景も変わってしまうのでダメ)
    {
        // フォームと同じ大きさのBITMAPを作成
        Bitmap image = new Bitmap(f2.Width, f2.Height);

        // 透過色で塗りつぶす
        Graphics g = Graphics.FromImage(image);
        g.Clear(Color.Green); // 何色でも良いが他のコントロールの色と違うものにする

        // 背景に設定
        f2.BackgroundImage = image;
    }
    // 透過色の設定
    f2.TransparencyKey = Color.Green;

    // 半透明フォームをオーナーにする
    this.AddOwnedForm(f2);

    // 連動イベント
    this.FormClosing += delegate { f2.Close(); }; // Closeに追従
    this.Move += delegate { f2.Location = this.PointToScreen(this.ClientRectangle.Location); }; // Moveに追従

    f2.Show();
}

実行するとこんな感じです。
左側のコントロールは背景が透けていますが、右側のコントロールは透けていません。
dual-form-3.png

ただし、このフォームには重大な欠点があります。
右側の透明なフォームの方のコントロールを触ると、透明なフォームがアクティブになるのでタイトルバーの色がノンアクティブになってしまいます。(フォーカスが外れたときと同じような表示になります)
今のところ、良い解決方法が思いつきません。解決方法が分かったら、追って記事にしたいと思います。

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 22:15 | Comment(2) | TrackBack(0) | C#

2011年04月24日

半透明のフォームの作り方(2つのフォームを重ねる)・続き

前回の続きです。

上に重ねるフォームを透明にします。
フォームを透明にするには、TransparencyKeyとBackColorに同じ色を設定すると良いのですが、コントロールの背景もBackColorになるので、コントロールも透けてしまいます。(ボタンも透けてしまう)
そこで、少し強引ですが、BackgroundImageにTransparencyKeyの色で塗りつぶしたBITMAPを指定することで、背景だけの透明化を実現します。

private void Form1_Load(object sender, EventArgs e)
{
    Form2 f2 = new Form2();

    // 背景を塗る(this.BackColorだとコントロールの背景も変わってしまうのでダメ)
    {
        // フォームと同じ大きさのBITMAPを作成
        Bitmap image = new Bitmap(f2.Width, f2.Height);

        // 透過色で塗りつぶす
        Graphics g = Graphics.FromImage(image);
        g.Clear(Color.Green); // 何色でも良いが他のコントロールの色と違うものにする

        // 背景に設定
        f2.BackgroundImage = image;
    }

    // 透過色の設定
    f2.TransparencyKey = Color.Green;

    // 表示
    f2.Show();
}

実行するとこんな感じです。背景だけが透明になり、コントロールは不透明になっています。
dual-form-2.png

続きます

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 21:10 | Comment(0) | TrackBack(0) | C#