电脑时间长了发现系统时间不准确,每次手动调整太麻烦,就自己写个程序校正一下

首先linux下设置时间 date -s "2023-01-29 11:12:13",普通执行没问题,放到java里字符串注意转义引号

另外date命令比较高级需要权限,所以直接执行是不行的,java本身是有限权限,折腾了很久发现还是在外面高权限调用java更快捷

java直接运行class,发现文件名不需要.class就可以,有包名的时候注意路径免得报找不到类错误

最后说一下思路,本来校时可以 sudo rdate -s time.nist.gov,但校时服务器不一定在线,就自己随便找个著名服务器curl访问一下,加上-i参数就会返回一个gmt时间,读取返回数据查找到时间行,然后把时间转换为本地时间配合当天日期调用命令date设置一下,注意curl和date调用命令用string和string[],那是因为date命令里有更复杂参数就用数组参数了

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.SequenceInputStream;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
// https://blog.csdn.net/lanlangaogao/article/details/120827047
public class ChangeTime {/*** 运行外部命令并获得返回结果** @param command 需要运行的外部命令* @return 合并标准输出和错误输出的返回结果*/public static StringBuilder buildProcess(String[] command) {StringBuilder builder = new StringBuilder();try {Process process = Runtime.getRuntime().exec(command);try (SequenceInputStream input = new SequenceInputStream(process.getInputStream(),process.getErrorStream());BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {String msg;while ((msg = reader.readLine()) != null) {builder.append(msg);builder.append(System.lineSeparator());System.out.println(msg);}process.waitFor();process.destroy();} catch (InterruptedException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();}return builder;}public static String exeProcess(String command) {String builder = "";try {Process process = Runtime.getRuntime().exec(command);System.out.println(command);try (SequenceInputStream input = new SequenceInputStream(process.getInputStream(),process.getErrorStream());BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {String msg;while ((msg = reader.readLine()) != null) {if (msg.startsWith("Date:")) {builder = msg;break;}System.out.println(msg);}process.waitFor();process.destroy();} catch (InterruptedException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();}return builder;}public static String runProcess(String[] command) {StringBuilder builder = buildProcess(command);if (builder.length() == 0) {return "";} else {return builder.substring(0, builder.length() - System.lineSeparator().length());}}public static String Time_Pattern = "HH:mm:ss";public static String Day_Pattern = "yyyy-MM-dd";/*** @param timePattern yyyy-MM-dd HH:mm:ss.SSSXXX*/public static String utcToLocal(String utcTime, String timePattern) {SimpleDateFormat utcFormater = new SimpleDateFormat(timePattern);utcFormater.setTimeZone(TimeZone.getTimeZone("UTC"));//时区定义并进行时间获取Date gpsUTCDate = null;try {gpsUTCDate = utcFormater.parse(utcTime);} catch (ParseException e) {return utcTime;}SimpleDateFormat localFormater = new SimpleDateFormat(timePattern);localFormater.setTimeZone(TimeZone.getDefault());String localTime = localFormater.format(gpsUTCDate.getTime());return localTime;}private static String[] getCommand(String command) {String os = System.getProperty("os.name");String shell = "/bin/bash";String c = "-c";if (os.toLowerCase().startsWith("win")) {shell = "cmd";c = "/c";}String[] cmd = {shell, c, command};System.out.println(command);return cmd;}public static void main(String[] args) {String builder = exeProcess("curl -i www.baidu.com");System.out.println(builder);for (String str : builder.split(" ")) {if (str.indexOf(":") > 0 && str.indexOf(":") < 3) {String str2 = utcToLocal(str, Time_Pattern);SimpleDateFormat localFormater = new SimpleDateFormat(Day_Pattern);Date now = new Date();String newDate = localFormater.format(now) + " " + str2;System.out.println(newDate);StringBuilder cmdBuilder = new StringBuilder();               cmdBuilder.append("date -s \"");cmdBuilder.append(newDate+"\"");                String runProc = runProcess(getCommand(cmdBuilder.toString()));System.out.println(runProc);break;}}}
}

就校时这一块常用的ntp服务,试了几次都没成功 服务器列表 - 全球可用的NTP服务器列表与解析服务 - ntp.org.cn & ntpdate.net

后来网上看到deepin系统自带校时服务,更新/etc/systemd/timesyncd.conf ntp服务地址

比如

cn.pool.ntp.org

然后service systemd-timesyncd start,就启动了系统自己的校时,然后可以看这个服务状态

service systemd-timesyncd status

java调用命令行校对系统时间相关推荐

  1. java调用命令行命令_Java命令行界面(第4部分):命令行

    java调用命令行命令 我的Java命令行解析系列的第四部分介绍了Commandline ,它被描述为 "用于解析命令行参数的Java库",它"基于使用注释从命令行参数到 ...

  2. java 调用命令行

    java 调用命令行 JAVA Runtime类 java调用命令行 1. java调用终端,使用命令"javac" 2. java调用终端,使用javac编译helloWorld ...

  3. Java调用命令行+java生成词云

    java调用命令行 package com.weizu.control; import java.io.BufferedReader; import java.io.InputStreamReader ...

  4. windows下命令行修改系统时间;修改系统时间的软件

    找了很久,都没有找到,还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片. 而我由于某些原因想自动化修改系统时间,所以找windows下修改系统时 ...

  5. Java中命令行调用大坑

    Java中命令行调用大坑 背景 我司有一个查询服务接口机,QPS大概40~50,调用方式是Java调用Shell命令行的方式,核心代码如下: Process ps = Runtime.getRunti ...

  6. 命令行 修复系统_让我们修复旧的命令行

    命令行 修复系统 by Manuel Vila 通过曼努埃尔·维拉(Manuel Vila) 让我们修复旧的命令行 (Let's fix the good old command line) Alth ...

  7. 介绍Java -D 命令行参数

    介绍Java -D 命令行参数 我们在ide中执行程序经常需要设置VM参数,运行maven命令也需要设置参数,都是通过-D设置参数值.本文带你了解-D命令行参数. 1. 什么是Java -D命令行参数 ...

  8. JAVA 的命令行运行

    作者:孙英鹏 撰写时间:2019年4月18日 JAVA 的命令行运行 今天要讲的是如何在命令行里进行打印运行.说明(此方法是老师的上课内容,我重新理解一遍) 首先创建一个文本文档,放在一个文件夹里,文 ...

  9. Java jar 命令行运行程序如何引用第三方依赖包

    1 引言 mybatis generator 是一个命令行运行工具,可以生成 mybatis 代码.但它需要依赖数据库驱动 jar,否则会抛出 ClassNotFoundException 异常. E ...

最新文章

  1. Python中numpy模块的简单使用
  2. 怎么用python读取csv文件、并且是读取行-使用python获取csv文本的某行或某列数据的实例...
  3. Safari下弹窗问题的解决办法
  4. Javascript跳转页面和打开新窗口等方法
  5. 安装SQL提示重启电脑失败,解决办法
  6. apigee 安装_APIGEE:用于API代理的CI / CD管道
  7. JavaScript-面试 表单验证
  8. T-SQL笔记7:临时表和表变量
  9. cygwin-1.7 离线安装包_【软件安装管家】ArcGIS 10.7 软件安装包+安装教程
  10. 【数据库原理实验(openGauss)】 使用JDBC连接数据库
  11. “外行”带你看国标38900-2020(一)
  12. 用cdr怎么精确裁剪图形
  13. android开发经典实战!来自阿里巴巴佛系安卓程序员的指南,专题解析
  14. python编写函数输出自除数_728. 自除数(Python)
  15. 自行车平衡分析和控制-转载
  16. ipad照片文件删除了怎么恢复
  17. 基于51单片机的智能蓝牙路灯街灯控制系统proteus仿真原理图PCB
  18. 【云宏大讲坛】超融合,融合的不仅是基础架构
  19. 怎么选择一个好的企业即时通讯软件
  20. 网站app注册登录短信验证码是怎么获取实现的

热门文章

  1. 华为全屋智能战略再升级 用三把钥匙打开未来家的大门
  2. ANTLR中文手册二(ANTLR 是什么)
  3. 基于 Iterative 映射和单纯形法的改进灰狼优化算法-附代码
  4. 为什么有时 Oracle 数据库不用索引来查找数据
  5. Vue-router无刷新删除页面参数
  6. bootstrap图片上传
  7. 法学行政法论文选题有哪些?
  8. 在苹果Mac上如何关闭触控板防止误触?
  9. 计算机原码 反码 和 补码
  10. Autoware.Auto