62,615
社区成员
发帖
与我相关
我的任务
分享
Calendar c1601=Calendar.getInstance();
c1601.set(Calendar.YEAR, 1601);
c1601.set(Calendar.MONTH, Calendar.JANUARY);
c1601.set(Calendar.DAY_OF_MONTH, 1);
c1601.set(Calendar.HOUR, 0);
c1601.set(Calendar.MINUTE, 0);
c1601.set(Calendar.SECOND, 0);
c1601.set(Calendar.MILLISECOND, 0);
long interval=0-c1601.getTimeInMillis();//1601的毫秒数,因为早于1970,因此是个负数,用0减得正数
long time1= 30089218l<<32;
time1+=1907785472l;//高低位合并,得到自1601年以来的"100纳秒"数
time1/=10000;//得到毫秒
Date d=new Date(time1-interval);//interval是1601-1970年之间的毫秒数
System.out.println(d);
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test4 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = sdf.parse("2010-07-10 07:35:18");
FileTime fileTime = FileTime.date2FileTime(date1);
System.out.println(fileTime.toString());
FileTime file = new FileTime();
file.setHigh(30089218);
file.setLow(1907785472);
Date date2 = FileTime.fileTime2Date(file);
System.out.println(sdf.format(date2));
}
}
class FileTime {
/**
* Unix 时间 1970-01-01 00:00:00 与 Win32 FileTime 时间 1601-01-01 00:00:00
* 毫秒数差
*/
public final static long UNIX_FILETIME_DIFF = 11644473600000L;
/**
* Win32 FileTime 采用 100ns 为单位的,定义 100ns 与 1ms 的倍率
*/
public final static int MILLISECOND_MULTIPLE = 10000;
private int low;
private int high;
public FileTime() {
}
public FileTime(int low, int high) {
this.low = low;
this.high = high;
}
/**
* 将 Win32 的 FileTime 结构转为 Java 中的 Date 类型
* @param fileTime
* @return
*/
public static Date fileTime2Date(FileTime fileTime) {
return new Date(fileTime.getFileTime() / FileTime.MILLISECOND_MULTIPLE - FileTime.UNIX_FILETIME_DIFF);
}
/**
* 将 Java 中的 Date 类型转为 Win32 的 FileTime 结构
* @param date
* @return
*/
public static FileTime date2FileTime(Date date) {
long time = (FileTime.UNIX_FILETIME_DIFF + date.getTime()) * FileTime.MILLISECOND_MULTIPLE;
FileTime fileTime = new FileTime();
fileTime.setHigh((int)(time >> 32) & 0xffffffff);
fileTime.setLow((int)time & 0xffffffff);
return fileTime;
}
public int getLow() {
return low;
}
public void setLow(int low) {
this.low = low;
}
public int getHigh() {
return high;
}
public void setHigh(int high) {
this.high = high;
}
/**
* 获得 FileTime 以 64 位数字表示的数据
* @return
*/
public long getFileTime() {
return ((long)high << 32 & 0xffffffff) | ((long)low & 0xffffffff);
}
public String toString() {
return "high: " + high + ", low: " + low;
}
}
long time=(1907785472l-621355968l)*1000;
Date d=new Date(time);
System.out.println(d);