【问题标题】:Remove millisecond from epoch-time/timestamp | java从纪元时间/时间戳中删除毫秒 |爪哇
【发布时间】:2012-10-18 10:16:10
【问题描述】:

我有一个纪元时间,我想将其转换为 sql 时间戳。我可以使用此代码从纪元中提取实际时间:

String time = "1351504294";
long t = Long.parseLong(time);
Timestamp ts = new Timestamp(t*1000);

我得到的输出是:2012-10-29 09:58:50.0。 但是当我尝试将其插入表中时,由于毫秒部分“09:58:50.0”而显示错误。如何从时间戳中删除毫秒部分?

【问题讨论】:

    标签: java timestamp unix-timestamp epoch


    【解决方案1】:

    如果您将Timestamp 直接添加到SQL 语句中,那么Java 将调用toString() 函数,该函数始终输出yyyy-mm-dd hh:mm:ss.fffffffff 格式。您无法对 Timestamp 对象执行任何操作来消除纳秒部分。

    如果您只想要 yyyy-MM-dd hh:mm:ss 部分,您可以这样做:

    Timestamp ts = new Timestamp(t*1000);
    String s = ts.toString().split('\\.')[0];
    

    或者你可以使用SimpleDateFormat:

    Timestamp ts = new Timestamp(t*1000);
    String s = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(ts);
    

    【讨论】:

    • 这很有魅力。我用的是第二个。 1000 谢谢 :))
    • ..其中,在我的硬件上,前者大约占用0.9µs,后者占用3.6µs :)
    • 你的“yyyy-mm-dd”文本应该是“yyyy-MM-dd”
    • 谢谢。在偶然发现您的答案之前,我尝试了ts.toString().split('.')。有谁知道为什么拆分时间戳字符串只适用于\\. 而不是.。我知道 `\` 有时用于转义,但这并不能帮助我理解它在这里的用途。
    【解决方案2】:

    试试这个方法......

    public class Time {
    
        public static void main(String[] args){
    
            String time = "1351504294";
            long t = Long.parseLong(time);
            Timestamp ts = new Timestamp(t*1000);
    
            String date = new SimpleDateFormat("YYYY-MM-dd hh:mm:ss").format(ts);
            System.out.println(date);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2013-05-14
      • 2013-08-19
      相关资源
      最近更新 更多