首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 时间转换问题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 08:40:37 楼主
    我开发一个软件,从系统得到系统启动的时间为毫秒数,想计算出系统的具体启动时间(精确到秒即可),但在vb2005中不知道该调用什么函数,才能用当前时间减去这个已运行时间毫秒数,得到系统的启动时刻?也就是说不知道如何把毫秒数转换为TimeSpan的格式(dd hh:mm:ss.ff),请各位高手指教!如果能直接得到系统启动时间也可,谢谢!
    Public Class Form1
        Dim StartTime As DateTime
        Dim TargetTime As DateTime
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim RunTime As TimeSpan = TimeSpan.Parse(My.Computer.Clock.TickCount)
            StartTime = My.Computer.Clock.LocalTime.Subtract(RunTime)
            txtStartTime.Text = StartTime.ToString
            TargetTime = StartTime.AddHours(2)
            txtTargetTime.Text = TargetTime.ToString
        End Sub
        Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
        Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim diff As TimeSpan = TargetTime.Subtract(Date.Now)
            txtRunTime.Text = Date.Now.ToString
            If diff = TimeSpan.Parse(0) Then
                ExitWindowsEx(4, 2)
            End If
        End Sub
    End Class
    上面是我的代码,有兴趣请过目,欢迎指正!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 08:58:131楼 得分:0
    Private Declare Function GetTickCount Lib "kernel32" () As Long

    Dim lngTickCount As Long
    lngTickCount = GetTickCount()
    MsgBox DateAdd("s", -lngTickCount \ 1000, Now())
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-18 09:42:372楼 得分:0
    用 New TimeSpan(毫秒数 * 10000) 就可以转换。
    由于 .Net 中 DateTime 和 TimeSpan 都精确到 1E-7 秒,所以你可以直接用当前时间就可以了。
    VB.NET code
    Public Class Form1 Dim StartTime As DateTime Dim TargetTime As DateTime Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load StartTime = Date.Now txtStartTime.Text = StartTime.ToString TargetTime = StartTime.AddHours(2) txtTargetTime.Text = TargetTime.ToString End Sub Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim NowTime As DateTime = Date.Now txtRunTime.Text = NotTime.ToString If NowTime >= TargetTime Then ExitWindowsEx(4, 2) End If End Sub End Class
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 09:36:203楼 得分:0
      对于两位仁兄的帮助表示感谢!of123的GetTickCount函数可以得到操作系统开机的毫秒数,但用DataAdd函数求得开机时刻时,我却怎么也得不到正确的时间,哈哈!可能是毫秒数的位数不一致,vb2005下有My.Computer.Clock.TickCount函数也可以得到系统启动的时长,但本人怎么也调试不出正确的时间来!
     
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 10:17:134楼 得分:0
    修改后的代码如下,运行效果比原来好些!
    Public Class Form1
        Dim StartTime As DateTime
        Dim TargetTime As DateTime

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim lngTickCount As ULong
            lngTickCount = My.Computer.Clock.TickCount
            StartTime = DateAdd("s", -lngTickCount * 0.001, My.Computer.Clock.LocalTime)
            txtStartTime.Text = StartTime.ToString
            TargetTime = StartTime.AddHours(2)
            txtTargetTime.Text = TargetTime.ToString
        End Sub
        Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
        Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim NowTime As DateTime = Date.Now
            txtRunTime.Text = NowTime.ToString
            If NowTime >= TargetTime Then
                ExitWindowsEx(4, 2)
            End If
        End Sub
    End Class
    但关机好象不是重启象是注销,哈哈!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 20:51:275楼 得分:0
    下面的代码,可以满足楼主的要求吗?
            Dim StartTime As DateTime = DateTime.Now - TimeSpan.FromMilliseconds(System.Environment.TickCount)
    System.Environment.TickCount等价于GetTickCount。
    使用TimeSpan.FromMilliseconds()可以将毫秒转化为TimeSpan。

    在偶看来,.Net 2005最大的进步是引入了泛型。
    而VB 2005最大的改进是增加了运算符的重载,可以让我们写出非常简洁明了的代码。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-19 21:07:546楼 得分:0
    至于关机部分的代码,如果程序只在XP下运行,建议调用Shutdown.exe命令。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved