当系统安装的时候,某种原因(没网或其它)导致安装日期不是当前日期,明明今天安装,日期却显示不对,有强迫症的我,带着问题去研究发现: 在注册表修改InstallDate无效(直接转当前日期为时间戳无法正确修改)
进入Windows注册表步骤:
运行->输入regedit->回车(或者CMD输入regedit->回车)
输入:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion->回车
百度一番原因如下:
“我的电脑-属性-系统-关于”里面的安装日期是改InstallTime;InstallDate是CMD里的systeminfo的安装日期。
InstallDate是从伦敦时间1970年1月1日到安装时间的总秒数
InstallTime是从伦敦时间1601年1月1日到安装时间的总秒数
补充解析:
windows FILETIME时间从1601/01/01 零时零分零秒开始计时,windows每个时钟滴答将计数加一,每个时钟滴答的间隔是100 nanoseconds(纳秒,1秒=10的九次方纳秒),即每个时钟滴答= 10 (-7)秒。
unix、linux时间是从1970/01/01零时零分零秒开始计数,每秒计数加1. 197001/01与1601/01/01的时间间隔是11644473600秒。
知道原因了,怎么获取计算InstallTime?
当然你可以手工计算,太麻烦了,本次通过复制粘贴就可以拿到你要修改的InstallDate和InstallTime
操作步骤:
到iconJava 在线工具 | 菜鸟工具输入框https://c.runoob.com/compile/10/
复制以下代码:
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
public class WindowsTimeTest {
public static void main(String[] args) {
String dateTime1 = "1601-01-01 00:00:00";
//修改成你要改的日期时间
String dateTime2 = "2022-08-24 01:00:00";
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//日期时间,毫秒
long time2 = sdf.parse(dateTime2).getTime();
//毫秒转为秒
System.out.println("CMD->systeminfo->安装日期:"+(time2/1000));
long m = time2 - sdf.parse(dateTime1).getTime();
//毫秒转为纳秒
BigDecimal bigDecimal1 = BigDecimal.valueOf(m);
BigDecimal bigDecimal2 =BigDecimal.valueOf(1000000);
BigDecimal multiply = bigDecimal1.multiply(bigDecimal2);
//取前18位输出
System.out.println("系统->关于->安装日期:"+multiply.toPlainString().substring(0,18));
}catch(Exception e){
}
}
}
运行程序,查看结果
3.进入Windows注册表(参考上面进入Windows注册表步骤),修改的时候选则十进制方式填写,然后确认
4.最后查看修改结果
- 系统->关于->安装日期
CMD->systeminfo->安装日期