รับการประทับเวลา unix จากวันที่ ()


85

ฉันสามารถแปลงการประทับเวลายูนิกซ์เป็นDate()วัตถุโดยใส่longค่าลงในตัวDate()สร้าง เช่น: ฉันสามารถเป็นnew Date(1318762128031)ได้

แต่หลังจากนั้นฉันจะเรียกคืนการประทับเวลายูนิกซ์จากDate()วัตถุได้อย่างไร


คุณยังสามารถรับค่า long ของวัตถุ Date ของคุณได้ใช่ไหม
Kent

@xEnOn: คุณไม่ได้แปลงการประทับเวลา Unix เป็นวันที่โดยใช้ตัวสร้างแบบยาว การประทับเวลา Unix ตามที่ฉันแสดงความคิดเห็นเกี่ยวกับคำตอบของ jackrabbit จะแสดงเป็นวินาทีไม่ใช่มิลลิวินาที ที่นี่: en.wikipedia.org/wiki/Unix_timeและที่นี่: unixtimestamp.com/index.php วินาที ไม่ใช่มิลลิวินาที
TacticalCoder

อาจซ้ำกันของการรับ "unixtime" ใน Java
Eran Medan

คำตอบ:


95

getTime()ดึงข้อมูลมิลลิวินาทีตั้งแต่วันที่ 1 มกราคม 1970 GMT ส่งผ่านไปยังผู้สร้าง ไม่ควรยากเกินไปที่จะรับเวลา Unix (เท่ากัน แต่เป็นวินาที) จากนั้น


1
ขอบคุณ. ฉันยังคงจำมันผิดเป็นฟังก์ชันคงที่ Date.getTime (วันที่ใหม่ ()) ซึ่งไม่ได้ผลและคิดว่าเกิดอะไรขึ้น
Carven

47
@jackrabbit: จริงๆแล้วgetTime ()ไม่ได้ให้การประทับเวลา Unix กลับมา แต่เป็น "Unix timestamp * 1000" ข้อกำหนดที่ตกลงกันเกี่ยวกับการประทับเวลา Unix คือให้เวลานับตั้งแต่ยุคเป็นวินาทีไม่ใช่มิลลิวินาที )
TacticalCoder

3
@TacticalCoder jackrabbit มีความแม่นยำมากขึ้น: ส่งคืนค่า unix-timestamp เป็นมิลลิวินาที ใช่การประทับเวลาแบบยูนิกซ์ตกลงกันเป็นวินาที - แต่ถ้าคำตอบของคุณเป็นจริง ( getTime() = unixTimestamp * 1000) getTime()จะส่งกลับค่าศูนย์สามตัวในตอนท้ายเสมอ แต่ในความเป็นจริงสามารถส่งคืนอะไรก็ได้จากการลงท้ายด้วย000ถึง999ซึ่งหมายความว่ามีค่าที่สูงกว่า ความแม่นยำเนื่องจากมิลลิวินาทีและไม่ใช่แค่ "* 1,000" ความหมาย: การเปรียบเทียบ unixTimestamp * 1000 จริงกับgetTime()ผลลัพธ์จะประสบความสำเร็จใน ~ 0.1% ของกรณีเท่านั้น
dognose

สำหรับเรกคอร์ดฟังก์ชันจะส่งคืนหน่วยมิลลิวินาทีในพื้นที่ GMT-0 (ในกรีนิช) ดังนั้นคุณจึงปลอดภัยในการแปลงสิ่งนี้เป็นพื้นที่ต่างๆ
Onat Korucu

50

ที่จะได้รับtimestampจากDate()คุณจะต้องแบ่งgetTime()โดย1000คือ:

Date currentDate = new Date();
currentDate.getTime() / 1000;
// 1397132691

หรือเพียงแค่:

long unixTime = System.currentTimeMillis() / 1000L;

1
หรือมากกว่านั้น:new Date().getTime()
MarkHu

25
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

public class Timeconversion {
    private DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); //Specify your locale

    public long timeConversion(String time) {
        long unixTime = 0;
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); //Specify your timezone
        try {
            unixTime = dateFormat.parse(time).getTime();
            unixTime = unixTime / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return unixTime;
    }
}

6

ใน java 8 สะดวกในการใช้วันที่ lib และgetEpochSecondวิธีการใหม่เพื่อรับการประทับเวลา (เป็นวินาที)

Instant.now().getEpochSecond();


แต่รหัสที่แสดงจะส่งกลับ # วินาทีสำหรับช่วงเวลานี้
Milan Velebit

จริง @MilanVelebit. คุณจะต้องทดแทนคุณต้องการแทนInstant Instant.now()หรือyourDesiredJavaUtilDate.toInstant()หากคุณล้าสมัยDateจาก API แบบเดิม
Ole VV

0

ฉันไม่รู้ว่าคุณต้องการบรรลุสิ่งนั้นใน js หรือ java หรือไม่ใน js วิธีที่ง่ายที่สุดในการรับ unix timestampt (นี่คือเวลาเป็นวินาทีตั้งแต่ 1/1/1970) เป็นดังนี้:

var myDate = new Date();
console.log(+myDate); // +myDateObject give you the unix from that date

-1

ใช้SimpleDateFormatคลาส ดู javadoc ของมัน: อธิบายวิธีใช้สวิตช์รูปแบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.