有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    假设可以将提供的天数转换为秒(为了方便起见,省略了一些小数部分),下面的代码将天数转换为秒,并根据本地机器(根据LocalDateTime.now())从当前时间中减去秒数(如持续时间):

    public static void main(String[] args) {
        double daysAgo = 3.47;
        LocalDateTime timeAgo = getTimeAgo(daysAgo);
        System.out.println("Time ago: " + timeAgo);
    }
    
    public static LocalDateTime getTimeAgo(double daysAgo) {
        long secondsAgo = secondsFromDays(daysAgo);
        Duration duration = Duration.of(secondsAgo, ChronoUnit.SECONDS);
    
        LocalDateTime now = LocalDateTime.now();
        System.out.println("Starting time: " + now);
        return now.minus(duration);
    }
    
    public static long secondsFromDays(double days) {
        return (long) (days * 24 * 60 * 60);
    }
    

    结果:

    Starting time: 2021-06-28T22:31:16.242040100
    Time ago: 2021-06-25T11:14:28.242040100
    
  2. # 2 楼答案

    在内部,Java日期存储为long,如文档所述,它表示“自被称为“历元”的标准基准时间(即1970年1月1日00:00 GMT)以来的毫秒数”

    通过调用日期的getTime()方法,可以从日期中获取长值

    可以使用long的构造函数创建long的日期,例如new Date(myLongValue)

    因此,你可以计算一天中的毫秒数,将当前时间作为一个长时间,从中减去(3.47*millissecondsinday),然后使用结果值来构造一个新的日期

    请注意,“一天中的毫秒数”可能是一个问题,这取决于您需要的准确性,以及您希望应用此方法的情况