Android : 将秒转换为年、日、小时、分钟、秒

Posted

技术标签:

【中文标题】Android : 将秒转换为年、日、小时、分钟、秒【英文标题】:Android : Convert seconds to year, day, hours, minutes, seconds 【发布时间】:2017-11-22 16:59:02 【问题描述】:

我正在开发一个 android 项目,使用已编码的 JSON 文件。

所以我有这个:


  "type": "Feature",
  "properties": 
    "mag": 1.29,
    "place": "10km SSW of Idyllwild, CA",
    "time": 1388620296020,
    "updated": 1457728844428
  

我想将time 转换为年、日、小时和秒。 我知道有很多话题在谈论我的问题,但我已经尝试过但没有成功。

【问题讨论】:

I already tried them without success 显示您尝试过的内容,以便我们帮助修复它。在您展示之前,我们无法相信您已经尝试过了。 不太确定我是否理解你的意思:你想用年、日、小时、分,秒? convert epoch time to date的可能重复 链接的问题有毫秒而不是seoncds,但转换应该是微不足道的;例如,在my answer there 中,只需使用Instant.ofEpochSecond() 而不是Instant.ofEpochMilli() 同意@VladMatvienko 的观点,帮助您的更好起点是其他问题没有帮助的地方。就您的问题而言,我们几乎无法在此处添加以前没有说过的任何内容,因此您只能冒险获得另外 5 个答案,但您可以尝试但没有成功。 【参考方案1】:

Android 中,您可以使用 ThreeTen Backport,这是 Java 8 新日期/时间类的一个很好的反向移植,以及 ThreeTenABP(更多关于如何使用它的信息 here)。

此 API 提供了一种处理日期的好方法,比过时的 DateCalendar 好得多(旧类(DateCalendarSimpleDateFormat)有 lots of problems 和他们正在被新的 API 取代)。

要从时间戳值中获取日期(假设 1388620296020 是 unix 纪元的 毫秒 数),您可以使用 org.threeten.bp.Instant 类:

// create the UTC instant from 1388620296020
Instant instant = Instant.ofEpochMilli(1388620296020L);
System.out.println(instant); // 2014-01-01T23:51:36.020Z

输出为2014-01-01T23:51:36.020Z,因为Instant 始终采用UTC。如果您想将其转换为另一个时区的日期/时间,您可以使用org.threeten.bp.ZoneId 类并创建一个org.threeten.bp.ZonedDateTime

ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris"));
System.out.println(z); // 2014-01-02T00:51:36.020+01:00[Europe/Paris]

输出将是2014-01-02T00:51:36.020+01:00[Europe/Paris](转换为巴黎时区的同一 UTC 时刻)。

请注意,API 避免使用 3 个字母的时区名称(例如 ECTCST),因为它们是 ambiguous and not standard。总是喜欢使用全名(如Europe/ParisAmerica/Los_Angeles,由IANA database 定义) - 您可以通过调用ZoneId.getAvailableZoneIds() 来获取所有可用的名称。

如果您想以不同的格式打印日期,可以使用org.threeten.bp.format.DateTimeFormatter(请参阅javadoc 以查看所有可能的格式):

ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris"));
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SSS Z");
System.out.println(fmt.format(z)); // 02/01/2014 00:51:36.020 +0100

【讨论】:

【参考方案2】:

你有整数溢出。只需使用以下内容(注意 1000 常量后的“L”):

 Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(seconds*1000L);
String dateString = calendar.get(Calendar.DAY_OF_WEEK) + ", "+.......

看到这个: https://***.com/a/5246444/7161543

【讨论】:

【参考方案3】:

试试这个

long uptime = 1388620296020;

long days = TimeUnit.MILLISECONDS
.toDays(uptime);
uptime -= TimeUnit.DAYS.toMillis(days);

long hours = TimeUnit.MILLISECONDS
.toHours(uptime);
uptime -= TimeUnit.HOURS.toMillis(hours);

long minutes = TimeUnit.MILLISECONDS
.toMinutes(uptime);
 uptime -= TimeUnit.MINUTES.toMillis(minutes);

long seconds = TimeUnit.MILLISECONDS
.toSeconds(uptime);

【讨论】:

【参考方案4】:

可以是 ;

long jsondate = 1388620296020L;
Date dt = new Date (jsondate); 
SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
System.out.println(sd.format(dt));

【讨论】:

非常感谢,但这不起作用 ^^' 我尝试了其他方法并且有效 :D : Long timeConvert = Long.parseLong(time); date = new SimpleDateFormat("dd/MM/yyyy").format(timeConvert); time = new SimpleDateFormat("HH:mm:ss").format(timeConvert); 请在长号后加“L” 非常感谢 :) 没问题mm :)【参考方案5】:

这个比较短:

    long lg=1388620296020l;
    Date date = new Date(lg);

【讨论】:

以上是关于Android : 将秒转换为年、日、小时、分钟、秒的主要内容,如果未能解决你的问题,请参考以下文章

将秒转换为(小时:分钟:秒:毫秒)时间的最佳方法是啥?

如何将秒转换为小时、分钟和秒?

将秒转换为天、小时、分钟、秒格式 (C++)

PHP 将秒数转换为小时,分钟,秒

将秒转换为天、小时、分钟、秒 (MySQL)

怎样将秒数转换成 小时:分钟的格式