Vâng, java.util.Date/Calendar chỉ có độ chính xác xuống millisecond:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0); // Clear the millis part. Silly API.
calendar.set(2010, 8, 14, 0, 0, 0); // Note that months are 0-based
Date date = calendar.getTime();
long millis = date.getTime(); // Millis since Unix epoch
Đó là tương đương với hiệu quả gần nhất. Nếu bạn cần chuyển đổi giữa giá trị .NET ticks và Date
/Calendar
, về cơ bản bạn cần thực hiện mở rộng quy mô (ticks to millis) và bù trừ (1st Jan 1AD đến 1st Jan 1970).
API và ngày giờ tích hợp sẵn của Java khá khó chịu. Cá nhân tôi khuyên bạn nên sử dụng Joda Time để thay thế. Nếu bạn có thể nói những gì bạn đang thực sự cố gắng làm, chúng tôi có thể giúp nhiều hơn.
EDIT: Được rồi, đây là một số mẫu mã:
import java.util.*;
public class Test {
private static final long TICKS_AT_EPOCH = 621355968000000000L;
private static final long TICKS_PER_MILLISECOND = 10000;
public static void main(String[] args) {
long ticks = 634200192000000000L;
Date date = new Date((ticks - TICKS_AT_EPOCH)/TICKS_PER_MILLISECOND);
System.out.println(date);
TimeZone utc = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(utc);
calendar.setTime(date);
System.out.println(calendar);
}
}
Lưu ý rằng đây xây dựng một ngày/Lịch đại diện cho UTC ngay lập tức các 2019/09/14. Biểu diễn .NET hơi mờ - bạn có thể tạo hai giá trị DateTime giống nhau ngoại trừ "loại" của chúng (nhưng do đó đại diện cho các phiên bản khác nhau) và chúng sẽ yêu cầu bằng nhau. Đó là một chút của một mớ hỗn độn :(
Nguồn
2010-09-14 05:31:30
Trong trường hợp hiện tại tôi đã lưu giá trị Ticks tính trong C#; bây giờ những gì tôi muốn là đọc giá trị đánh dấu đó và nhận được cùng một ngày trong Java. –
@Asoo: Ok. Đi bộ để làm việc ATM - mã trong hai mươi phút. Về cơ bản chia cho các ve mỗi mili giây và trừ một phần bù. Bạn cũng nên ghi nhớ thời gian bù trừ múi giờ. –
Cảm ơn @ Skeet .... Nhưng nếu tôi muốn tính toán ve trong Java và đọc chúng trong C# ..... tôi đã thử điều này nhưng nó không mang lại giá trị giống hệt nhau: TimeZone utc = TimeZone.getTimeZone ("UTC"); Lịch lịch = Calendar.getInstance (utc); calendar.set (2010,8,14,0,0,0); System.out.println (calendar.getTimeInMillis() * TICKS_PER_MILLISECOND + TICKS_AT_EPOCH); –