当前位置: 首页 > 知识库问答 >
问题:

在android中自定义SimpleDataFormat的显示值

东门佐
2023-03-14

我目前正在研究一个双倍值,它代表总消耗时间

例如,我有一个260,这意味着消耗了260秒

要显示给用户,我想格式化它

例如,它应该是0年、0个月、0天、1小时、2分钟、30秒

但是我发现SimpleDateFormat sdf=new SimpleDateFormat("HH: mm: ss");不太适合我的情况(似乎"hr"中的"h"与小时符号冲突?)

那么,如何将HH:mm:ss更改为上述情况呢?

谢谢你的帮助

共有2个答案

杨凌
2023-03-14

在大多数情况下,接受的答案可以解决您的问题,但给出了不使用类SimpleDateFormat的错误原因。这个format类非常适合java类型的对象。util。日期(这是一种以毫秒为单位的unix时间戳,因此是时间的绝对值,而不是日期)。为了将“hr”这样的字母视为文字,你需要避开它们。示例代码:

// create timestamp
java.util.Date jud = new java.util.Date(260 * 1000); // milliseconds

// create format for timestamp
SimpleDateFormat sdf = 
  new SimpleDateFormat("yyyy'year',M'month',d'day',H'hr',m'min',s'sec'");

// otherwise you will get extra offset time (example: in England +1 hour DST)
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

// output: 1970year,1month,1day,0hr,4min,20sec
String formatted = sdf.format(jud);
System.out.println(formatted);

即使在代码中应用了棘手的时区校正,您也面临着一个问题,即您有1970年的输出,一个时间点。在此,您可以看到SimpleDateFormat格式时间戳(时间的绝对值),但不是持续时间(时间的长度)。这个语义问题也不能通过使用的方法来解决,只要输入增加了86400秒的日限制java.util.For事

旧的JDK和Android没有提供内置的解决方案来评估以年、月和日表示的时差。Java8确实通过新的API提供(有限的)支持(类“Period”仅用于日期部分,而不是时间部分)。JodaTime或我自己的外部库(实际上只作为alpha版本)提供了更多支持。JodaTime甚至提供了一个特殊的周期格式化程序,非常适合解决您的问题。

邓业
2023-03-14

DateFormat用于格式化日期,而不是时间的绝对值。

为了实现你的目标,你可以看看Formatter

希望此示例对您有所帮助:

String total_consumed_time = String.format("%01d year, %01d month, %01d day, %01d hr, %01d min, %01d sec", time_year, time_month, time_day, time_hour, time_min, time_seg);

我没有尝试过该代码,但我使用了类似的解决方法,绝对时间以毫秒为单位:

long time = 260000; // time in mseg
long time_hour = TimeUnit.MILLISECONDS.toHours(time);
time -= TimeUnit.HOURS.toMillis(time_hour);
long time_min = TimeUnit.MILLISECONDS.toMinutes(time);
time -= TimeUnit.MINUTES.toMillis(time_min);
long time_seg = TimeUnit.MILLISECONDS.toSeconds(time);
String total_time = String.format("%02d:%02d:%02d", time_hour, time_min, time_seg);

结果是“00:04:20”(4分20秒)。

 类似资料:
  • 您好,我正在使用。 }下面是各自的xml: 在适配器获取视图:公共视图getView(int位置,视图转换视图,ViewGroup父){ ImageLoader。从这里开始的Java 在从服务器加载映像之前,如何在中显示临时映像。

  • 我正在尝试弹出一个自定义对话框,当我点击一个按钮,但它不会弹出在所有。我的应用程序基本上是一个日历,我将使用sqlite在日历中添加/保留约会和其他内容,使用对话框,这是指定约会细节的地方。 我为此使用的代码如下: 我做错了什么?

  • 问题内容: 在创建我自己的SimpleAdapter对象之前,因为我想更改行的颜色,所以我只是使用new SimpleAdapter(…)。现在,我正在使用自己的自定义SimpleAdapter,行颜色正在更改,但是我的文本没有得到更新。我已经调用了adapter.notifyDataSetChanged(),但它仍只显示示例文本“ TextView”。正如我所说,当我没有创建自己的适配器时,一切

  • 我正在使用Bootstrap的DateTimePicker,我正在加载带有多行的视图,每个人都有一个datetimepicker,我正在从数据库中预加载带有时间戳的值,例如datetime: 这工作得很好,但是我想以格式显示DD/MM/YYYY HH: mm: ss我把它放在格式选项上,如下所示: 但这不起作用,这给我加载了一个空字段。然后,我尝试使用data属性,将其添加到HTML标记中: 但是

  • 我正在做一个spring boot项目,使用OPENAPI作为api文档的工具。 我试图用直观的输入(page-pageSize-sort)覆盖UI中可分页json对象的显示 这是可行的,但是参数页面、页面大小和排序被添加到所有方法中。我如何才能使这只适用于需要可分页的方法?

  • 我有一个自定义ProgressBar: 然而,它没有工作--后台任务正在执行,但ProgressBar没有显示。如何使用AsyncTask在活动顶部显示ProgressBar?