精华内容
下载资源
问答
  • Linux date 修改时间

    2017-11-28 11:27:00
    Linux date修改时间 命令格式:date -s 修改时间的字符 范例:修改系统日期,不修改时间(时分秒) # date -s 2020-12-20 范例:修改系统时间 不修改日期 # date -s 10:40:23 范例:修改系统日期和系统时间 # date -...

    Linux date修改时间 

    命令格式:date -s 修改时间的字符

    范例:修改系统日期,不修改时间(时分秒)

    # date -s 2020-12-20

    范例:修改系统时间  不修改日期

    # date -s 10:40:23

    范例:修改系统日期和系统时间

    # date -s "2020-12-02 10:40:23"     #<==因为日期和时间想之间有空格 所以需用引号引起来 否则会报错

    注意:如果想要彻底更改系统的时间和日期 需要执行:clock -w




    本文转自 yzllinux 51CTO博客,原文链接:http://blog.51cto.com/12947851/2073066,如需转载请自行联系原作者
    展开全文
  • Linux date命令修改时间的问题问题路径找原因解决方法 问题 使用下面date命令修改时间日期,时分秒生效,年月日不生效 => date -D YYYY-MM-DD hh:mm:ss 路径 \android\external\toybox\toys\posix\date.c \...

    Linux date命令修改时间的问题

    问题

    Android10;高通平台
    使用下面date命令修改时间日期,时分秒生效,年月日不生效
    => date -D YYYY-MM-DD hh:mm:ss

    路径

    \android\external\toybox\toys\posix\date.c
    \android\external\toybox\lib\args.c

    找原因

    首先在命令行键入
    => adb shell date -D 2020-10-01 22:59:00

    去代码看一下参数传的有没有什么问题
    \android\external\toybox\main.c

    // argc:参数的数量   argv: 参数
    int main(int argc, char *argv[])
    {
      if (!*argv) return 127;
    
      if (CFG_TOYBOX) {
        // Call the multiplexer, adjusting this argv[] to be its' argv[1].
        // (It will adjust it back before calling toy_exec().)
        toys.argv = argv-1;
        toybox_main();
      }
      ...
    }
    

    argc = 4,
    argv[0] = date, argv[1] = -D, argv[2] = 2020-10-01, argv[3] = 22:59:00
    在这里插入图片描述
    很明显这里并没有什么问题,我们接着往下看调用toybox_main()

    // Multiplexer command, first argument is command to run, rest are args to that.
    // If first argument starts with - output list of command install paths.
    void toybox_main(void)
    {
      static char *toy_paths[]={"usr/","bin/","sbin/",0};
      int i, len = 0;
    
      if (toys.argv[1]) {
        toy_exec(toys.argv+1);
        if (0<readlink(toys.argv[1], libbuf, sizeof(libbuf)))
          toy_exec_which(toy_find(basename(libbuf)), toys.argv);
      }
      ...
    }
    

      参数传给toys.argv,我们看一下toys.argv里面是怎么存放数据的:
      其中toys.argv[0]为空,toys.argv[1] = date, toys.argv[2] = -D, toys.argv[3] = 2020-10-08, toys.argv[4] = 22:59:00
      还是没有问题,我们接着往下看

    // Lookup internal toybox command to run via argv[0]
    void toy_exec(char *argv[])
    {
      toy_exec_which(toy_find(basename(*argv)), argv);
    }
    
    // Run an internal toybox command.
    void toy_exec_which(struct toy_list *which, char *argv[])
    {
      ...
      // Run command
      toy_init(which, argv);
      if (toys.which) toys.which->toy_main();
      xexit();
    }
    
    void toy_init(struct toy_list *which, char *argv[])
    {
      void *oldwhich = toys.which;
      ...
      // Continue to portion of init needed by standalone commands
      toy_singleinit(which, argv);
    }
    
    static void toy_singleinit(struct toy_list *which, char *argv[])
    {
      toys.which = which;
      toys.argv = argv;
      ...
    
      if (NEED_OPTIONS && which->options) get_optflags();
      else {
        toys.optargs = argv+1;
        for (toys.optc = 0; toys.optargs[toys.optc]; toys.optc++);
      }
      toys.old_umask = umask(0);
      if (!(which->flags & TOYFLAG_UMASK)) umask(toys.old_umask);
      toys.signalfd--;
      toys.toycount = ARRAY_LEN(toy_list);
    }
    

    这里走的分支是get_optflags()
      get_optflags()是对参数的解析,通过log可以发现get_optflags的for循环只循环了gof.argc=1(-D),gof.argc=3(22:59:00),漏掉了gof.argc=2就是年月日
    先看gof.argc=1的循环:
      gof.arg是字符型指针,指向toys.argv[1] = -D 的”-”,++后就指向了”D”, 所以传给gotflag()的参数是”D”

    // Fill out toys.optflags, toys.optargs, and this[] from toys.argv
    void get_optflags(void)
    {
      struct getoptflagstate gof;
      struct opts *catch;
      unsigned long long saveflags;
      char *letters[]={"s",""};
    
      // Iterate through command line arguments, skipping argv[0]
      for (gof.argc=1; toys.argv[gof.argc]; gof.argc++) {
        gof.arg = toys.argv[gof.argc];
        catch = NULL;
    
        // Parse this argument
        if (gof.stopearly>1) goto notflag;
    
        gof.nodash_now = 0;
    
        // Various things with dashes
        if (*gof.arg == '-') {
    
          // Handle -
          if (!gof.arg[1]) goto notflag;
          gof.arg++;
          if (*gof.arg=='-') {
            struct longopts *lo;
    
            gof.arg++;
            // Handle --
            if (!*gof.arg) {
              gof.stopearly += 2;
              continue;
            }
    
            // do we match a known --longopt?
            for (lo = gof.longopts; lo; lo = lo->next) {
              if (!strncmp(gof.arg, lo->str, lo->len)) {
                if (!gof.arg[lo->len]) gof.arg = 0;
                else if (gof.arg[lo->len] == '=' && lo->opt->type)
                  gof.arg += lo->len;
                else continue;
                // It's a match.
                catch = lo->opt;
                break;
              }
            }
    
            // Should we handle this --longopt as a non-option argument?
            if (!lo && gof.noerror) {
              gof.arg -= 2;
              goto notflag;
            }
    
            // Long option parsed, handle option.
            gotflag(&gof, catch);
            continue;
          }
    
        // Handle things that don't start with a dash.
        } else {
          if (gof.nodash && (gof.nodash>1 || gof.argc == 1)) gof.nodash_now = 1;
          else goto notflag;
        }
    
        // At this point, we have the args part of -args.  Loop through
        // each entry (could be -abc meaning -a -b -c)
        saveflags = toys.optflags;
        while (*gof.arg) {
    
          // Identify next option char.
          for (catch = gof.opts; catch; catch = catch->next)
            if (*gof.arg == catch->c)
              if (!((catch->flags&4) && gof.arg[1])) break;
    
          // Handle option char (advancing past what was used)
          if (gotflag(&gof, catch) ) {
            toys.optflags = saveflags;
            gof.arg = toys.argv[gof.argc];
            goto notflag;
          }
        }
        continue;
    
        // Not a flag, save value in toys.optargs[]
    notflag:
        if (gof.stopearly) gof.stopearly++;
        toys.optargs[toys.optc++] = toys.argv[gof.argc];
      }
      ...
    }
    

      看下为什么会把年月日跳过,gotflag()中选项(-option)解析, gotflag(&gof, catch);
    传入的gof->arg 指向 ”D”, gof->arg有参数++指向” ”

    // Use getoptflagstate to parse one command line option from argv
    static int gotflag(struct getoptflagstate *gof, struct opts *opt)
    {
      int type;
    
      // Set flags
      toys.optflags |= opt->dex[1];
      gof->excludes |= opt->dex[2];
      if (opt->flags&2) gof->stopearly=2;
    
      ...
      // Does this option take an argument?
      if (!gof->arg) {
        if (opt->flags & 8) return 0;
        gof->arg = "";
      } else gof->arg++; // 指向" "
      type = opt->type; // type = ":"
    
      ...
      return 0;
    }
    

    char*arg = ” ”
    gof->nodash_now = 0, !arg[0] = 1, opt->flags = 0
    进行判断,++argc,argc由1变为2,也是导致年月日被跳过的原因
    这时arg指向“2020-10-08”, opt->arg指向“2020-10-08”

    解决方法

      由于args.c是解析命令行参数的共用文件,没把握最好不要修改,很容易影响到其他命令的解析。我们可以让被跳过的参数2为任意字符,如("+"可为任意字符)
    => date -D + YYYY-MM-DDhh:mm:ss
    另外也可以使用
    => date MMDDhhmmYYYY.ss set
    来设置时间

    展开全文
  • date命令修改时间重启后失效的问题问题原因解决总结 问题 使用date命令修改时间成功,但是重启后失效 date命令 => date MMDDhhmmYYYY.ss set 原因   Linux中有硬件时钟和系统时钟两种。硬件时钟:存储在主板上...

    date命令修改时间重启后失效的问题

    问题

    使用date命令修改时间成功,但是重启后失效

    date命令
    => date MMDDhhmmYYYY.ss set

    原因

      Linux中有硬件时钟系统时钟两种。硬件时钟:存储在主板上CMOS里,关机后该时钟依然运行,主板的电池为它供电,嵌入式设备有一个RTC模块,硬件时钟即RTC时钟。系统时钟是软件时钟,软件启动后去读取硬件时钟,然后独立运行。

      date命令修改的是系统时钟,所以重启后会失效

    解决

      首先了解下hwclock命令

    usage: hwclock [-rswtluf]
    
    -f FILE Use specified device file instead of /dev/rtc (--rtc)
    -l      Hardware clock uses localtime (--localtime)
    -r      Show hardware clock time (--show)
    -s      Set system time from hardware clock (--hctosys)
    -t      Set the system time based on the current timezone (--systz)
    -u      Hardware clock uses UTC (--utc)
    -w      Set hardware clock from system time (--systohc)
    

      在用date修改完系统时间后,通过hwclock命令将系统时间同步到硬件时间
    => hwclock -uw
      其中“-w”是将系统时间同步到硬件时间,但是当参数只有“-w”,重启后会发现时间和我们设置的并不一样;这是因为硬件时间是以UTC时间来存取的,所以我们要加个“-u” 来进行时区转换。

    总结

    date命令修改时间后,将系统时间同步给硬件时间,这样重启后就不会失效了
    => date MMDDhhmmYYYY.ss set
    => hwclock -uw

    展开全文
  • 3、同时修改日期和时间 date -s "2012-05-18 04:53:00" 注意:由于日期和时间之间有空格,所以必须用引号引起来,否则命令会报错。 ———————————————— 版权声明:本文为CSDN博主「xiaosongbk」的...

    date -s 时间字符串

    1、只改系统的日期,不改时间       date -s 2012-08-02

    2、只改时间不改日期 date -s 10:08:00

    3、同时修改日期和时间   date -s "2012-05-18 04:53:00"

    注意:由于日期和时间之间有空格,所以必须用引号引起来,否则命令会报错。

    https://www.hangge.com/blog/cache/detail_2499.html
    https://blog.csdn.net/qichangjian/article/details/86718525
    ————————————————
    版权声明:本文为CSDN博主「xiaosongbk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/xiaosongbk/article/details/71516161

    展开全文
  • Linux 时间修改--date -s命令

    万次阅读 2019-05-18 12:36:07
    Linux 时间修改 不重启修改时区 一、修改linux的时间 root使用date指令:date -s 1、只修改日期,不修改时间,输入: Linux代码 1. date -s 2007-08-03 date -s 2007-08-03 2、只修改时间,输入:...
  • android adb通过date命令修改系统时间

    千次阅读 2019-08-28 19:50:27
    linux修改系统时间,通过date -s命令即可。 android也是通过date命令,但不是date -s,而是 date 123012002018.59 set 注意,必须以root身份修改,否则修改无效。先adb root,再adb shell,即可以root身份...
  • linux系统下date命令修改时间及hwclock硬件时间6794修改日期: 时间设定成2016年5月18日的命令如下:date -s 05/18/2016修改时间: 将系统时间设定成上午10点10分40秒的命令如下。date -s 10:10:40修改时区: ...
  • date 命令临时修改时间及还原 # 查看当前时间 date ## Thu Mar 18 00:46:07 AEDT 2021 ## 可见当前日期为2021 年3 月18 日 # 临时设置日期 sudo date -s 12/12/12 date ## Wed Dec 12 00:00:00 AEDT 2012 ## 这样...
  • Ubuntu date命令修改时间失败解决方法

    千次阅读 2018-04-02 13:49:26
    修改时间后系统时间没有变化ubuntu:~$ sudo date -s "2018-4-2 11:21:45"Mon Apr 2 11:21:45 PDT 20182.date命令查看时间还是之前的时间ubuntu:~$ dateSun Apr 1 22:36:08 PDT 20183.需要使用下面的方法...
  • 一、 先说一下时钟的概念,时钟包括硬件时钟和系统时钟,系统时钟就是linux系统显示的时间,用命令date可以显示当前系统时间;硬件时钟就是硬件自身的 时间了。它们两者没有关系的,但是可以通过命令设置系统时钟和...
  • 修改日期:时间设定成2016年5月18日的命令如下:#date -s 05/18/2016修改时间:将系统时间设定成上午10点10分40秒的命令如下。#date -s 10:10:40修改时区:找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai...
  • 文章地址:...s 时间字符串 1、只改系统的日期,不改时间 date -s 2012-08-02 2、只改时间不改日期 date -s 10:08:00 3、同时修改日期和时间 date -s "2012-05-18 04:53:00
  • date –s:按字符串方式修改时间 可以只修改日期,不修改时间,输入: date -s 2007-08-03 只修改时间,输入:date -s 14:15:00 同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入: #date -s "...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,258
精华内容 903
关键字:

date修改时间命令