我有一个 DatePicker
元素(“dpstart”)。
我想拯救世界 timestamp
在字符串“newstartdate”处的午夜(毫秒),不考虑用户的时区。
我该怎么做?
DatePicker DPstart = (DatePicker) findViewById(R.id.datePickerStart);
Calendar calendar = new GregorianCalendar(DPstart.getYear(), DPstart.getMonth(), DPstart.getDayOfMonth());
long DPS = calendar.getTimeInMillis();
String newStartDate = Long.toString(DPS);
2条答案
按热度按时间628mspwn1#
3TENABP公司
我的建议是你跳过过时的课程
Calendar
以及GregorianCalendar
并开始使用现代的java日期和时间api。和他一起工作更好。即使在什么时候DatePicker
返回值是为与旧类一起使用而设计的。即使现代的api还没有在很多android手机上实现(这一点将会到来)。你需要得到3TENABP图书馆。有用的问题:如何在android项目中使用threetenabp。你的代码可以是这样的:
2017年9月4日,结果将是
1504483200000
.从日期选取器的基于0的月份转换为
LocalDate
更人性化的一个月有点奇怪。如果您发现只添加1更简单,那么也可以:我已经重命名了您的变量,以符合java编码约定。他们说变量名应该以小写字母开头。
另外,我认为存储时间戳的公认最佳实践是
Instant
你从哪里得到的toInstant()
或其字符串表示形式(从toString()
)而不是毫秒值。毫秒值对于我们大多数人来说是很难解释的,例如当我们在调试器中看到它们时。Instant
价值观很容易理解,至少大致上是指什么时候。更好的人类可读格式是LocalDate
,看起来像2017-09-04
. 两者的字符串表示形式Instant
以及LocalDate
符合iso 8601。过时的解决方案
如果你肯定不想依赖第三方库,比如threetenabp,即使是暂时的,直到现代的date and time api出现在android上,我相信
Calendar
是(1)确保它使用utc时区(2)清除小时、分钟、秒和毫秒以确保您在午夜获得时间:结果同上。
azpvetkf2#