繁体   English   中英

如何从 Java 字符串转换为 hh:mm:ss 格式的日期?

[英]How to convert from Java String to Date of format hh:mm:ss?

  1. 从我的 Web 服务方法调用之一返回浮点值的字符串:

    例如:375.677、61.47 等。

  2. 这些值只不过是 931 分钟和 500 秒。
  3. 但我必须将此字符串转换为 HH:MM:SS 的日期格式,这意味着:例如:06:20:04。

我研究了堆栈交换问题并尝试了下面的解决方案。 但那是返回无效值。 这是我试过的代码:

    float f = Float.parseFloat("375.677");

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.add(Calendar.HOUR_OF_DAY, (int) f);
    calendar.set(Calendar.MINUTE, (int) ((f * 60) % 60));
    calendar.set(Calendar.SECOND, (int) ((f * 3600) % 3600));

    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
    System.out.println(dateFormat.format(calendar.getTime()));

请让我知道如何解决这个问题。

提前致谢,佐久

只需要 JDK 1.5。

    String input = "375.677";
    int mins = 0;
    int secs = 0;
    StringTokenizer st = new StringTokenizer(input, ".");
    if (st.hasMoreTokens()) mins = Integer.parseInt(st.nextToken());
    if (st.hasMoreTokens()) secs = Integer.parseInt(st.nextToken());
    if (st.hasMoreTokens()) throw new IllegalStateException("Second dot not allowed!");

    int seconds = mins*60+secs;
    int ss = seconds % 60;
    seconds = seconds / 60;
    int mm = seconds % 60;
    seconds = seconds / 60;
    int hh = seconds;

    System.out.println(String.format("%02d:%02d:%02d", hh, mm, ss));

我猜你的意思是点之前的几分钟,之后的几秒钟,分钟上升到 931,秒上升到 500。如果是这样,请尝试

float f = Float.parseFloat("375.677");
int m = ((int) f);
int s = ((int) (f * 1000)) % 1000;
// handle second overflow
m += s / 60;
s %= 60;
// handle minute overflow
int h = m / 60;
m %= 60;

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, h);
calendar.set(Calendar.MINUTE, m);
calendar.set(Calendar.SECOND, s);

SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
System.out.println(dateFormat.format(calendar.getTime()));

将所有内容转换为秒:

    String timeString = "234.34";
    String[] timeValuesAfterSplit = timeString.split("\\.");
    int minutesToSeconds = Integer.parseInt(timeValuesAfterSplit[0]) * 60;
    int totalSeconds = minutesToSeconds + Integer.parseInt(timeValuesAfterSplit[1]);

现在使用 LocalTime 获取给定格式的时间:

LocalTime localTime = LocalTime.ofSecondOfDay(totalSeconds);

然后可以通过在localTime上调用toString()来获得您需要的格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM