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

Calendar 如何使用MonoDroid添加日历项?,calendar,xamarin.android,Calendar,Xamarin.android,我试图在android设备上向日历添加一个事件,我使用的是MonoDroid。我在Java中找到了以下示例: 我试图将第一个代码段翻译成C#,但设置“beginTime”和“endTime”字段时遇到问题,尤其是从Calendar.getTimeInMillis()转换为System.DateTime。这是我的代码: DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); TimeSpan startSpan = fromDat

我试图在android设备上向日历添加一个事件,我使用的是MonoDroid。我在Java中找到了以下示例:

我试图将第一个代码段翻译成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字段填充了今天的日期和长度为一小时的时间段


如何正确设置事件的开始/结束时间?

我过去使用过一种非常有效的助手方法。下面是一个快速示例,可以正确设置日期和时间

protectedoverride void OnCreate(捆绑包)
{
base.OnCreate(bundle);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.Main);
AddEvent(此“示例事件”、DateTime.UtcNow、DateTime.UtcNow.AddHours(5));
}
公共void AddEvent(上下文ctx、字符串标题、日期时间开始、日期时间结束)
{
var intent=新的intent(intent.ActionEdit);
intent.SetType(“vnd.android.cursor.item/event”);
意向。额外(“标题”,标题);
intent.PutExtra(“开始时间”,TimeInMillis(开始));
intent.PutExtra(“endTime”,TimeInMillis(end));
意图。PutExtra(“全天”,假);
星触觉(意图);
}
private readonly static DateTime jan1970=新的DateTime(1970,1,1,0,0,0,DateTimeKind.Utc);
专用静态Int64 TimeInMillis(DateTime DateTime)
{
返回(Int64)(日期时间-1970年1月)。总毫秒数;
}

谢谢,这很有效!我的错误是调用PutExtra(),结果为DateTime.TotalMillistics,返回的是double,而不是Int64。我更新了示例代码,以便它现在可以独立运行。以前,TimeInMillis方法是datetime的一种扩展方法,可能会引起一些问题。此外,此代码仅在活动中使用时经过测试。如果在片段等中使用,则需要修改。Mike,我的代码和此相同,但当我用MS调用PutExtra时,日历会给出正确的日期,但不是正确的时间。我在TimeInMillis设置了一个断点,我的dateTime和jan1970都是正确的,所以我假设msec是正确的。但是,我的时间错了。我猜你的时间不是UTC格式的。确保如果您获取的是当前时间,您使用的是DateTime.UtcNow,或者如果您有一个DateTime对象,您使用的是ToUniversalTime()方法。希望这能为您解决所有问题。是的,您是正确的,当时是UTC,因此添加myDateTime.ToUniversalTime解决了大部分问题!我的结束时间总是从开始时间算起1小时。“endTime”是正确的额外值吗?有持续时间值吗?或者我需要给它一个时间跨度,而不是实际的事件结束时间?