测量从起点到当前时间、一天结束或终点的时间跨度

如何解决测量从起点到当前时间、一天结束或终点的时间跨度

我想写两个方法,它们都依赖于一天中还剩多少时间的信息(到一天结束还剩多少秒,以及一天中已经有多少百分比)已通过)。不同的日子有不同的跨度(有时只是)秒,有时是几小时,所以我只依靠 24 * 60 * 60 并减去 sinceMidnight() 的结果是行不通的。 我试图在当前时间上加一天,但直到现在我都失败了。

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;

public class TimesOfSeconds {

    public static void sinceMidnight(int intHours,int intMinutes,int intSeconds) {
        int hoursInSeconds = intHours * 60 * 60;
        int minutesInSeconds = intMinutes * 60;
        int secondsSinceMidnight = hoursInSeconds + minutesInSeconds + intSeconds;
        System.out.println(secondsSinceMidnight + " Seconds since Midnight!");
    }

    public static void tillEndOfDay() {

    }

    public static void percentOfDayPassed() {

    }

    public static void getTheTimeRight(int intHours,int intSeconds) {
        System.out.println(intHours + " " + intMinutes + " " + intSeconds);
    }

    public static void main(String[] args) {

        Calendar cal = Calendar.getInstance();
        SimpleDateFormat justHours = new SimpleDateFormat("HH");
        int intHours = Integer.parseInt(justHours.format(cal.getTime()));
        SimpleDateFormat justMinutes = new SimpleDateFormat("mm");
        int intMinutes = Integer.parseInt(justMinutes.format(cal.getTime()));
        SimpleDateFormat justSeconds = new SimpleDateFormat("ss");
        int intSeconds = Integer.parseInt(justSeconds.format(cal.getTime()));

        getTheTimeRight(intHours,intMinutes,intSeconds);
        sinceMidnight(intHours,intSeconds);
    }
}

解决方法

我不确定

不同的日子有不同的跨度(有时只是)秒,有时是几小时,所以我只依靠 24 * 60 * 60 并减去 sinceMidnight() 的结果是行不通的。

也许你在谈论一些工作日?

无论如何 - 为了计算持续时间、周期,java.time 有很好的工具可以为您进行数学计算。

        LocalDateTime todayMidnight = LocalDate.now().atStartOfDay();
        Duration since = Duration.between(todayMidnight,LocalDateTime.now());
        long sinceMidnight = since.getSeconds();
        System.out.println(sinceMidnight + " Seconds since Midnight!");

        LocalDateTime endOfTheDay = LocalDate.now().plusDays(1).atStartOfDay();
        Duration till = Duration.between(LocalDateTime.now(),endOfTheDay);
        long tillEndOfDay = till.getSeconds();
        System.out.println(tillEndOfDay + " Seconds till end of the day");

        long percentOfDayPassed = since.getSeconds() * 100 / (60*60*24);
        System.out.println("percentOfDayPassed: " + percentOfDayPassed + "%");

Here you can find some more examples,并根据您的需要进行调整

,

我建议您使用 java.time,现代 Java 日期和时间 API,用于您的时间工作。我想你的意思是说一天可以是 23、24 或 25 小时或其他长度。要考虑到这一点,请使用具有正确时区的 ZonedDateTime,因为此类知道此类异常。

    ZoneId zone = ZoneId.systemDefault();
    
    ZonedDateTime timeNow = ZonedDateTime.now(zone);
    System.out.println("Time now:                 " + timeNow.toLocalTime());
    
    LocalDate today = timeNow.toLocalDate();
    ZonedDateTime startOfDay = today.atStartOfDay(zone);
    System.out.println("Seconds since midnight:   "
            + ChronoUnit.SECONDS.between(startOfDay,timeNow));
    
    ZonedDateTime endOfDay = today.plusDays(1).atStartOfDay(zone);
    System.out.println("Seconds until midnight:   "
            + ChronoUnit.SECONDS.between(timeNow,endOfDay));
    
    long nanosOfDayPassed = ChronoUnit.NANOS.between(startOfDay,timeNow);
    long dayLengthNanos = ChronoUnit.NANOS.between(startOfDay,endOfDay);
    double percentagePassed = 100.0 * nanosOfDayPassed / dayLengthNanos;
    System.out.format("Percentage of day passed: %f %%%n",percentagePassed);

输出是刚才运行时:

Time now:                 19:17:38.994190
Seconds since midnight:   69458
Seconds until midnight:   16941
Percentage of day passed: 80,392354 %

我要让你像你在问题中所做的那样用漂亮的方法包装代码。

链接

Oracle tutorial: Date Time 解释如何使用 java.time。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?