1

对于将通过网络使用的应用程序的集中日志记录目的(尚不涉及服务器端应用程序),我还需要存储特定事件发生的时间。这项任务非常简单,但问题是,正如我所注意到的,网络上的计算机没有准确地设置它们的时间。因此为了规范时间我选择使用net time \\nas. 到目前为止一切都很好。

现在的问题是,net time返回时间的格式取决于运行应用程序的特定系统的日期时间格式,它保证是一致的,因此将硬编码的日期格式转换为时间戳是无用的。有什么解决办法和意见吗?

由于我正在使用 python 编码,因此无法使用此解决方案。

4

1 回答 1

0

我得到的输出net time \\nas格式如下:

Current time at \\nas is dd/mm/yyyy HH:MM:SS

Local time (GMT) at \\nas is dd/mm/yyyy HH:MM:SS

The command completed successfully.

以下方法让我得到了我需要的东西:

import subprocess
import time
import datetime
from _winreg import *
from dateutil.parser import parse

def runProcess(exe):
    p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while(True):
      retcode = p.poll() #returns None while subprocess is running
      line = p.stdout.readline()
      yield line
      if(retcode is not None):
        break

def nasTime():
    for line in runProcess(r"net time \\nas".split()):
        timeLine = line
        break
    timeLine = timeLine.split("is ")[1].replace("\r\n", "")
    hKey = OpenKey (HKEY_CURRENT_USER, r"Control Panel\International")
    value, type = QueryValueEx (hKey, "sShortDate")
    dayFirst = str(value).lower().startswith("d") # tells if day first format was being used
    return time.mktime(parse(timeLine, dayfirst = dayFirst).timetuple())

从这里( runProcess) 和另一个我不记得的地方窃取的代码。

于 2013-08-01T05:45:23.703 回答