java - 从午夜到日期对象的秒数

标签 java date

我有一个方法,可以从时间服务器加载时间并返回设置为该时间的日期对象。唯一的问题是,我从服务器获得的时间是自午夜以来的秒数。如何设置从午夜开始的秒数的日期对象?

public String timeserver = "time.nist.gov"; // Official U.S. Timeserver - Uses Time Protocol
    public Date load() {
        Socket reader;
        try {
            reader = new Socket(timeserver, 32);
            InputStreamReader isr = new InputStreamReader(reader.getInputStream());
            BufferedReader in = new BufferedReader(isr);
            long g = isr.read() & 0x00000000ffffffffL;
            Date d = new Date();
            //set d's time from g?

            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

最佳答案

仅使用标准 Java 库,这可以通过 Calendar 类来完成:

// This gets you today's date at midnight
Calendar cal = Caledar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

// Next we add the number of milliseconds since midnight
long milliseconds = seconds * 1000;
cal.add(Calendar.MILLISECOND, milliseconds);

Date date = cal.getTime();

但是,如果它仍然是一个选项,我建议您考虑使用 Joda-Time 库。它has many advantages优于内置的 Date 类,例如更简单的 API。

在 Joda-Time 中,可以通过以下方式完成上述操作:

// Duration since midnight
long milliseconds = seconds * 1000;
Duration timeSinceMidnight = new Duration(milliseconds);

// Get the time of midnight today and add the duration to it
DateTime date = new DateMidnight().toDateTime();
date.plus(timeSinceMidnight);

关于java - 从午夜到日期对象的秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25534026/

相关文章:

java - spring kafka 一个消费者消费多种Message类型

java - 如何将俄罗斯日期格式转换为美国日期格式?

javascript - 如何在sql中使用时间戳字符串查询日期时间戳字段

c++ - 我想重载运算符 '=' 但在重载之后运算符没有将正确的信息传递给对象

sql-server - SQL Server 函数将工作日添加到日期

java - 如何在 OpenScript - Oracle Application Testing Suite 中传递运行时参数?

Java 单元测试覆盖率数字不匹配

xml - 在 XSLT 中按月份和年份对 XML 节点进行分组

java - 解析具有未知结构的 JSON 以便与已知结构进行比较的最佳方法?

java - 在单独的类中重新绘制/更新 JPanel 时出现问题