对于将通过网络使用的应用程序的集中式日志记录(尚未涉及服务器端应用程序),我还需要存储特定事件发生的时间。这项任务非常简单,但问题是,正如我所注意到的,网络上的计算机没有准确设置时间。因此,为了标准化我选择使用net time \\nas
从NAS获取它的时间。一切都很好。
现在问题是,net time
返回时间的格式取决于运行应用程序的特定系统的日期时间格式,保证一致,因此呈现{{ 3}}没用。任何解决方案和意见?
因为我在python中编码,所以无法使用hard coded dateformat conversion to timestamp解决方案。
答案 0 :(得分: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())
代码从here(runProcess
)以及另一个我无法回忆的地方被盗。