Java 如何将Instant转换为Int
在我的应用程序中,我有Java 如何将Instant转换为Int,java,android,kotlin,instant,Java,Android,Kotlin,Instant,在我的应用程序中,我有AlarmManager来设置计划通知 为了对每个项目都有唯一的通知,我需要为每个挂起的意图设置唯一的id,否则通知会相互重叠 我的问题是我的PK是字符串,而不是int。在我的项目模型中,我最接近int的东西是Instant,它表示通知应该发送的时间,并且是唯一的 由于pendingentid只是一个int,我如何将Instant转换为int? 或者我应该采取另一种方法,在我的模型中创建数据字段来保存挂起的意图ID吗 据我所知,我不应该直接转换它,因为它会弄乱日期/时间,并
AlarmManager
来设置计划通知
为了对每个项目都有唯一的通知,我需要为每个挂起的意图设置唯一的id,否则通知会相互重叠
我的问题是我的PK是字符串,而不是int。在我的项目模型中,我最接近int的东西是Instant,它表示通知应该发送的时间,并且是唯一的
由于pendingent
id只是一个int,我如何将Instant转换为int?
或者我应该采取另一种方法,在我的模型中创建数据字段来保存挂起的意图ID吗
据我所知,我不应该直接转换它,因为它会弄乱日期/时间,并且可能(?)不会通过唯一的(使用
hashCode
进行简单的字符串到int的转换。但根据定义,散列码不是唯一的。如果可能,将类型从int
更改为String
可能是最好的选择。如果您确实需要转换,我建议您创建类似于和IndexProvider
的内容
public interface IndexProvider {
/**
* Idempotent index provider for id conversion.
* Be aware of memory consumption because the implementations are allowed to cache id's.
* @param id unique id
* @return a cached unique id or a new unique id
*/
int getIndex(String id);
}
这将允许您简单地解决问题。您可以在实现中使用映射来保存字符串
id。另一个想法是在数据库中解决这个问题。例如,一个新表为每个String
id保存一个int
id。最后,您必须修改某些内容,并且每个方法都有Pro和Contra
这可能不是一个完整的答案,但我没有足够的声誉发表评论。我认为这应该行得通:
instant.get(ChronoField.INSTANT_SECONDS)
它可以是
长的
,还是必须是int
?您的实例的粒度是多少Instant
具有纳秒精度,您可以在5秒内使用Instant
s耗尽int
的范围。另一方面,如果您只需要第二个粒度,例如,int
可能会持续100年。