Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:将时间从今天转换为时间戳_Java_Timestamp - Fatal编程技术网

Java:将时间从今天转换为时间戳

Java:将时间从今天转换为时间戳,java,timestamp,Java,Timestamp,我使用的是Java 6,我有一个从当前日期算起的时间作为字符串,如下所示:14:21:16,我需要将其转换为存储在数据库中的时间 然而,似乎没有什么好方法可以从中获取时间戳。非常接近,但需要日期。有没有一种好方法可以从这样一个字符串生成一个Timestamp对象?有一个给定的日期(比如说unix epoch?)作为日期。当你使用它时,只使用你关心的时间参数,忽略一天 另一个选项是java.sql.Time 就我个人而言,我会将时间解析为LocalTime,并将其添加到今天的LocalDate中,

我使用的是Java 6,我有一个从当前日期算起的时间作为字符串,如下所示:
14:21:16
,我需要将其转换为存储在数据库中的时间

然而,似乎没有什么好方法可以从中获取时间戳。非常接近,但需要日期。有没有一种好方法可以从这样一个字符串生成一个Timestamp对象?

有一个给定的日期(比如说unix epoch?)作为日期。当你使用它时,只使用你关心的时间参数,忽略一天

另一个选项是java.sql.Time

就我个人而言,我会将时间解析为
LocalTime
,并将其添加到今天的
LocalDate
中,得到
LocalDateTime
,然后使用您感兴趣的时区将其转换为
即时
。(或使用
LocalTime.toDateTimeToday(DateTimeZone)

然后使用
时间戳(long)
构造函数创建一个时间戳

还有很多其他方法(例如使用
SimpleDateFormat
而不是使用Joda-Time进行解析,如果您真的需要…),但最终您可能需要
Timestamp(long)
构造函数。(在这里使用Joda Time的好处是,很明显每个阶段所代表的是什么——你没有试图将“时间”视为“日期和时间”,反之亦然。)

这样如何:

final String str = "14:21:16";
final Timestamp timestamp =
    Timestamp.valueOf(
        new SimpleDateFormat("yyyy-MM-dd ")
        .format(new Date()) // get the current date as String
        .concat(str)        // and append the time
    );
System.out.println(timestamp);
输出:

2011-03-02 14:21:16.0


使用org.apache.commons.lang.time.DateUtils:

Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);    
DateFormat df = new SimpleDateFormat("HH:mm:ss");
Date time = df.parse("14:21:16");
Timestamp time = new Timestamp(today.getTime() + time.getTime());

我能想到的使用标准API的最佳方法并没有那么漂亮:

    // Get today's date and time.
    Calendar c1 = Calendar.getInstance();
    c1.setTime(new Date()); 

    // Get the required time of day, copy year, month, day.
    Calendar c2 = Calendar.getInstance();
    c2.setTime(java.sql.Time.valueOf("14:21:16"));
    c2.set(Calendar.YEAR, c1.get(Calendar.YEAR));
    c2.set(Calendar.MONTH, c1.get(Calendar.MONTH));
    c2.set(Calendar.DAY_OF_MONTH, c1.get(Calendar.DAY_OF_MONTH));

    // Construct required java.sql.Timestamp object.
    Timestamp time = new Timestamp(c2.getTimeInMillis());

    Let's see what we've done.
    System.out.println(time);

请注意,java.sql.Time.valueOf根据需要接受格式为“HH:MM:SS”的字符串。其他格式需要使用SimpleDataFormat。

+1以更简洁的方式获取今天开始的时间值,尽管它确实需要org.apache.commons.lang.time.DateUtilsWell,但您也可以使用
long millisToday=new Date().getTime()/86400000//86400000每天的毫秒数
顺便说一句,apache commons lang库提供了许多有用的实用程序,使用它可以让您的生活更加轻松。这种方法真的能给出正确的答案吗?(原始版本)如果我尝试的话,我会有一个小时的休息时间,而我现在是格林尼治标准时间(GMT)。我不明白为什么现在我的纪元(System.out.println(新日期(0)))会在1970年1月1日返回凌晨1点,因此我会休息一小时。我遗漏了什么吗?检查一下
System.out.println(timestamp)
显示的内容,你会发现这不是今天的日期。感谢你的回答,我确实对一个仅使用标准API的解决方案感兴趣。完全有效的回答,这不是你的错:-)(+1)+1基于它的工作原理,而且,似乎很容易找到答案,因为我们不理解的原因,答案是不正确的@Tom是的,Java date API很糟糕,但我相信没有外部库的工作答案是必须的(尽管我更喜欢Jon Skeet的答案)
    // Get today's date and time.
    Calendar c1 = Calendar.getInstance();
    c1.setTime(new Date()); 

    // Get the required time of day, copy year, month, day.
    Calendar c2 = Calendar.getInstance();
    c2.setTime(java.sql.Time.valueOf("14:21:16"));
    c2.set(Calendar.YEAR, c1.get(Calendar.YEAR));
    c2.set(Calendar.MONTH, c1.get(Calendar.MONTH));
    c2.set(Calendar.DAY_OF_MONTH, c1.get(Calendar.DAY_OF_MONTH));

    // Construct required java.sql.Timestamp object.
    Timestamp time = new Timestamp(c2.getTimeInMillis());

    Let's see what we've done.
    System.out.println(time);