Nhận dấu thời gian unix từ Ngày ()


85

Tôi có thể chuyển đổi một dấu thời gian unix thành một Date()đối tượng bằng cách đặt longgiá trị vào hàm Date()tạo. Ví dụ: I could have it as new Date(1318762128031).

Nhưng sau đó, làm cách nào để lấy lại dấu thời gian unix từ Date()đối tượng?


bạn vẫn có thể nhận được giá trị dài của đối tượng Date của mình, phải không?
Kent

@xEnOn: bạn không chuyển đổi dấu thời gian Unix thành ngày tháng bằng cách sử dụng hàm tạo dài. Dấu thời gian Unix, như tôi đã nhận xét về câu trả lời của jackrabbit, được biểu thị bằng giây, không phải mili giây. Tại đây: en.wikipedia.org/wiki/Unix_time và đây: unixtimestamp.com/index.php Giây. Không phải mili giây.
TacticalCoder

bản sao có thể xảy ra của Bắt "unixtime" trong Java
Eran Medan

Câu trả lời:


93

getTime()truy xuất mili giây kể từ ngày 1 tháng 1 năm 1970 GMT được chuyển cho hàm tạo. Không quá khó để có được thời gian Unix (giống nhau, nhưng tính bằng giây) từ đó.


1
Cảm ơn. Tôi liên tục nhớ nhầm nó là một hàm tĩnh Date.getTime (new Date ()) không hoạt động và nghĩ rằng điều gì đang xảy ra.
Carven

47
@jackrabbit: thực ra getTime () không trả lại dấu thời gian Unix mà là "dấu thời gian Unix * 1000". Định nghĩa đã đồng ý về dấu thời gian Unix là nó cung cấp thời gian kể từ kỷ nguyên tính bằng giây, không phải mili giây; )
TacticalCoder

3
@TacticalCoder jackrabbit chính xác hơn: Nó trả về dấu thời gian unix tính bằng mili giây. Có, dấu thời gian unix được thống nhất là tính bằng giây - nhưng nếu câu trả lời của bạn là đúng, ( getTime() = unixTimestamp * 1000), getTime()sẽ luôn trả về ba Zeros ở cuối, nhưng trên thực tế có thể trả về bất kỳ thứ gì từ kết thúc bằng 000đến 999, có nghĩa là nó có giá trị cao hơn độ chính xác đến từng mili giây và không chỉ là "* 1000". Ý nghĩa: So sánh unixTimestamp * 1000 thực với getTime()kết quả sẽ chỉ thành công trong ~ 0,1% trường hợp.
dognose

Đối với bản ghi, hàm trả về mili giây trong khu vực GMT-0 (ở Greenwich), Vì vậy, bạn có thể an toàn khi chuyển đổi nó sang các khu vực khác nhau.
Onat Korucu

50

Để có được một timestamptừ Date(), bạn sẽ cần phải chia getTime()cho 1000, tức là:

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

hoặc đơn giản:

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

1
Hoặc ngắn gọn hơn:new Date().getTime()
MarkHu 17/12/16

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

Trong java 8, thật tiện lợi khi sử dụng lib và getEpochSecondphương thức ngày tháng mới để lấy dấu thời gian (ở vị trí thứ hai)

Instant.now().getEpochSecond();


Nhưng mã được trình bày trả về # giây cho này khoảnh khắc
Milan Velebit

Đúng, @MilanVelebit. Bạn sẽ phải thay thế mong muốn của bạn Instantthay vì Instant.now(). Hoặc yourDesiredJavaUtilDate.toInstant()nếu bạn có một DateAPI cũ từ một API cũ.
Ole VV

0

Tôi không biết bạn muốn đạt được điều đó trong js hay java, trong js cách đơn giản nhất để lấy dấu thời gian unix (thời gian tính bằng giây từ ngày 1/1/1970) như sau:

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

-1

Sử dụng SimpleDateFormatlớp học. Hãy xem javadoc của nó: nó giải thích cách sử dụng chuyển đổi định dạng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.