如何使用MonoDroid添加日历项目?

时间:2013-01-29 12:23:56

标签: calendar xamarin.android

我正在尝试将事件添加到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 个答案:

答案 0 :(得分: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;
}