0

Androidデバイスのカレンダーにイベントを追加しようとしていますが、MonoDroidを使用しています。Javaで次の例を見つけました:http ://www.androidcookbook.com/Recipe.seam?recipeId = 3852

最初のコードスニペットをC#に変換しようとしましたが、「beginTime」フィールドと「endTime」フィールドの設定、特にCalendar.getTimeInMillis()からSystem.DateTimeへの変換に問題があります。これは私のコードです:

DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan startSpan = fromDate - epoch;
TimeSpan endSpan = toDate - epoch;

Intent intent = new Intent(Intent.ActionEdit);
intent.SetType("vnd.android.cursor.item/event");
intent.PutExtra("beginTime", startSpan.TotalMilliseconds);
intent.PutExtra("endTime", endSpan.TotalMilliseconds);

その結果、fromフィールドとtoフィールドには、今日の日付と1時間の時間枠が入力されます。

イベントの開始/終了時刻を正しく設定するにはどうすればよいですか?

4

1 に答える 1

2

私は過去にかなりうまくいったヘルパーメソッドを使用しました。これは、日付と時刻を適切に設定する必要がある簡単なサンプルです。

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);

    // Set our view from the "main" layout resource
    SetContentView(Resource.Layout.Main);

    AddEvent(this, "Sample Event", DateTime.UtcNow, DateTime.UtcNow.AddHours(5));
}

public void AddEvent(Context ctx, String title, DateTime start, DateTime end)
{
    var intent = new Intent(Intent.ActionEdit);
    intent.SetType("vnd.android.cursor.item/event");
    intent.PutExtra("title", title);
    intent.PutExtra("beginTime", TimeInMillis(start));
    intent.PutExtra("endTime", TimeInMillis(end));
    intent.PutExtra("allDay", false);
    ctx.StartActivity(intent);
}

private readonly static DateTime jan1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

private static Int64 TimeInMillis(DateTime dateTime)
{
    return (Int64)(dateTime - jan1970).TotalMilliseconds;
}
于 2013-01-29T14:53:17.077 に答える