android - 将生日放入联系人数据的正确方法是什么?

标签 android date android-sqlite android-contacts

背景

我正在尝试更新联系人数据并将每个人的生日放在那里。

问题

似乎对于我尝试的每一种设备(我什至没有尝试那么多设备),插入都有一个或多个这样的问题:

  • 查看/编辑联系人时,不能点击和编辑生日。
  • 查看/编辑联系人时,显示的格式与用户输入生日时显示的格式不同
  • 缺少年份,或完全错误的年份。
  • 查看联系人时,不显示生日,但在编辑时显示。而且,相反。

我尝试过的

我试过使用时间戳和完整的 ISO8601 格式(因为 this link,意思是“yyyy-MM-dd HH:mm:ss”)。我也尝试过“yyyy-MM-dd”,并尝试使用设备日期的默认格式。

所有人都有提到的问题(每个至少有一个)。

这是一段代码:

final Date birthdate = ...
// String birthdateStr = new SimpleDateFormat("yyyy-MM-dd").format(birthdate);
// String birthdateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(birthdate);
// String birthdateStr = new SimpleDateFormat(((SimpleDateFormat) java.text.DateFormat.getDateInstance(java.text.DateFormat.DEFAULT, Locale.getDefault())).toLocalizedPattern(),Locale.getDefault()).format(birthdate);


String birthdateStr = Long.toString(birthdate.getTime()/1000);
final Builder builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValue(Data.RAW_CONTACT_ID, ...)
       .withValue(ContactsContract.Data.MIMETYPE, Event.CONTENT_ITEM_TYPE)
       .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, birthdateStr)
       .withValue(ContactsContract.CommonDataKinds.Event.TYPE,
                    ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);

当然,我在这里也关注过这个问题,发现了类似的问题,但所提出的解决方案似乎都不太奏效。

问题

我应该如何在联系人中真正插入生日?为什么每个设备都有自己的方式来解释日期?生日的正确标准是什么?

最佳答案

基于 this answer , 我会说你应该使用 YYYY-MM-DD 格式,但你需要定义一个帐户类型和帐户名称。所以添加这些行:

.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)

如果这有帮助,请告诉我。

关于android - 将生日放入联系人数据的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31382216/

相关文章:

android - 动画可绘制 MyLocationOverlay()

php - 使用 PHP 数组根据日期范围和类型填充价格字段

javascript - 创建与日历年不同的自定义年份? JS/QML

android - 共享 apk 时 sqlite db 会发生什么

java - 你能在 Android Studio 的 SQLite 中创建你自己的 Enum 类型吗?

java - 可以在 GridView 单元格中添加 View 吗?

android - 如何检测联系人的默认电话号码(如果已设置)

android - opengles- 如何呈现动态对象列表并更新每一帧的位置

java - (重新)使用 DateTimeFormatter 解析日期范围或将 DateTimeFormatter 与正则表达式混合

android - Sqlite 数据库不返回数据