- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用官方网站上的教程编写了一个简单的代码来将全天事件插入到日历中。 http://developer.android.com/guide/topics/providers/calendar-provider.html
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, dueDate.getTime());
values.put(Events.ALL_DAY, true);
values.put(Events.DTEND, dueDate.getTime());
values.put(Events.TITLE, "Some Event");
values.put(Events.CALENDAR_ID, mCalID);
TimeZone tz = TimeZone.getDefault();
values.put(Events.EVENT_TIMEZONE, tz.getID());
Uri uri = cr.insert(Events.CONTENT_URI, values);
我发现当我在运行 4.03 的 Acer 设备上打开 Google 日历应用程序时,输入的日期已向后移动 1 天。我本地的时区是悉尼,即 GMT+10。
所以我转到设置,将本地时区更改为美国东部时间 (GMT -5) 并运行相同的代码,但日期没有变化。然后我将时区更改为 GMT+2, Istanbul 尔,日期发生了变化。然后我换成London GMT 0,也没有shift。
当我做非全天 Activity 时,无论时区如何,正确的时间都会输入到日历中。
我找到的最接近的错误报告是这个 http://code.google.com/p/android/issues/detail?id=14051
我是不是在代码中遗漏了什么,或者其他人也遇到过这个问题。
编辑关于使用内容解析器读取事件数据时的进一步检查
ContentResolver cr = context.getContentResolver();
Uri uri = CalendarContract.Events.CONTENT_URI;
String selection =CalendarContract.Events._ID + "=?";
String [] selectionArgs = new String[]{String.valueOf(eventID)};
转换为日期时 long 的值是正确的日期和时间,例如。 2013 年 2 月 14 日 12:00 AEST(悉尼时间)。所以问题一定出在谷歌日历读取这些值的方式上。当我从 Android 中的日历应用程序手动添加一个全天事件,并使用内容解析器读取时间时,它是 AEST(悉尼时间)的日期和上午 11 点,这对应于悉尼的 +11 GMT 偏移。所以需要在 GMT 中输入全天事件以避免这种情况,但文档中没有提及这一点。
所以现在我正在转移时间,以避免这个问题。
最佳答案
几个想法:
[1]“如果 allDay 设置为 1,则 eventTimezone 必须为 TIMEZONE_UTC,并且时间必须对应于午夜边界。”
[2] http://developer.android.com/reference/android/provider/CalendarContract.Events.html
关于GMT +x 地区的 Android 日历全天 Activity 日期关闭一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291091/
我想要一些如何打印消息,例如:“从那时起,已经过去了 x 天、y 小时、z 分钟和 w 秒”。目前我正在做这样的事情,但我想念剩下的部分(最重要的是)我不喜欢它。应该有更美的东西 dt = (date
有一个令人费解的要求。 基本上我需要根据这些条件创建唯一的 id 9 位数字,当天唯一(表示如果第二天再次出现该号码也没关系) 实时生成;仅限 java(意味着没有从数据库生成序列号 - 实际上根本没
我是一名优秀的程序员,十分优秀!