请教计算开始时间和结束时间之间的间隔!

一夜编舟 2013-01-06 11:33:59
各位坛友,
我现在想计算出一个时间的间隔,初始时间、结束时间都在00:00-23:59的范围,
得到的时间间隔的格式也为:XX:XX
----------
要得到的效果如下:
开始时间是22:00
结束时间是03:00
时间间隔则应为:(03:00+23:59)-22:00=04:59
===
现在我这样子做:

string st1 = "23:00";//开始时间
string st2 = "23:43";//结束时间
DateTime dt1 = Convert.ToDateTime(st1);
DateTime dt2 = Convert.ToDateTime(st2);
TimeSpan ts1 = new TimeSpan(dt1.Ticks);
TimeSpan ts2 = new TimeSpan(dt2.Ticks);
TimeSpan ts = ts2.Subtract(ts1).Duration();
//格式化在00:00-23:59的范围
string output = String.Format("{0:00}:{1:00}", ts.TotalHours, ts.Minutes);
MessageBox.Show(output);

========
但是,结果却输出了01:43,
为啥会多了一个01??不是应该的00:43吗??
----------------------
谢谢各位!
...全文
495 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一夜编舟 2013-01-07
  • 打赏
  • 举报
回复
引用 3 楼 lzxue1989 的回复:
。。。四舍五入了 ……
======== ~谢谢!
一夜编舟 2013-01-07
  • 打赏
  • 举报
回复
引用 2 楼 findcaiyzh 的回复:
用 string output = String.Format("{0:00}:{1:00}", ts.Hours, ts.Minutes); ts.TotalHours不是整数,是个小于一的小数,四舍五入成1了。
================ 谢谢!
一夜编舟 2013-01-07
  • 打赏
  • 举报
回复
引用 4 楼 Snowdust 的回复:
C# code?12345678910111213141516string st1 = "23:00";//开始时间string st2 = "03:43";//结束时间DateTime dt1 = Convert.ToDateTime(st1);DateTime dt2 = Convert.ToDateTime(st2);//格式化在00:00-23:59的范围Time……
========== 正解!~谢谢!
_猫了个咪 2013-01-07
  • 打赏
  • 举报
回复
引用 2 楼 findcaiyzh 的回复:
用 string output = String.Format("{0:00}:{1:00}", ts.Hours, ts.Minutes); ts.TotalHours不是整数,是个小于一的小数,四舍五入成1了。
解释的很清楚
Snowdust 2013-01-07
  • 打赏
  • 举报
回复
string st1 = "23:00";//开始时间
string st2 = "03:43";//结束时间
DateTime dt1 = Convert.ToDateTime(st1);
DateTime dt2 = Convert.ToDateTime(st2);
//格式化在00:00-23:59的范围
TimeSpan ts;
if (dt1 > dt2)
{
	ts = dt2.AddDays(1) - dt1;
}
else
{
	ts = dt2 - dt1;
}
string output = String.Format("{0:00}:{1:00}", ts.Hours, ts.Minutes);
MessageBox.Show(output);
csdn_风中雪狼 2013-01-07
  • 打赏
  • 举报
回复
引用 楼主 cloudfile 的回复:
各位坛友, 我现在想计算出一个时间的间隔,初始时间、结束时间都在00:00-23:59的范围, 得到的时间间隔的格式也为:XX:XX ---------- 要得到的效果如下: 开始时间是22:00 结束时间是03:00 时间间隔则应为:(03:00+23:59)-22:00=04:59 === 现在我这样子做: string st1 = "23:00……
四舍五入了
宝_爸 2013-01-07
  • 打赏
  • 举报
回复
用 string output = String.Format("{0:00}:{1:00}", ts.Hours, ts.Minutes); ts.TotalHours不是整数,是个小于一的小数,四舍五入成1了。
rayyu1989 2013-01-07
  • 打赏
  • 举报
回复

Imports System.Text.RegularExpressions

Public Class Form1



    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Label1.Text = (String.Format("{1}到{2}  :  {3}{0}{4}到{5}  :  {6}{0}{7}到{8}  :  {9}{0}{10}到{11}  :  {12}", vbCrLf,
                             "00:01", "00:34", Demo("00:01", "00:34"),
                         "01:01", "00:34", Demo("01:01", "00:34"),
                          "00:34", "00:33", Demo("00:34", "00:33"),
                          "11:34", "00:33", Demo("11:34", "00:33")
                         ))
    End Sub
    Private Function Demo(time1 As String, time2 As String) As String
        Dim m1 As Match = Regex.Match(time1, "(?<hour>[\d]{1,2})\:(?<minute>[\d]{1,2})", RegexOptions.IgnoreCase Or RegexOptions.ExplicitCapture)
        If m1.Success Then
            Dim hour1, minute1 As Integer
            hour1 = Integer.Parse(m1.Groups("hour").Value)
            minute1 = Integer.Parse(m1.Groups("minute").Value)
            m1 = Regex.Match(time2, "(?<hour>[\d]{1,2})\:(?<minute>[\d]{1,2})", RegexOptions.IgnoreCase Or RegexOptions.ExplicitCapture)
            If m1.Success Then
                hour1 = Integer.Parse(m1.Groups("hour").Value) - hour1
                minute1 = Integer.Parse(m1.Groups("minute").Value) - minute1
                If minute1 < 0 Then
                    minute1 += 60
                    hour1 -= 1
                End If
                If hour1 < 0 Then
                    hour1 += 24
                End If
                Return String.Format("{0}:{1}", hour1.ToString("D2"), minute1.ToString("D2"))
            End If
        End If
        Return "err"
    End Function
End Class
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Text.RegularExpressions;

public class Form1
{



	private void Form1_Load(object sender, EventArgs e)
	{
		Label1.Text = (string.Format("{1}到{2}  :  {3}{0}{4}到{5}  :  {6}{0}{7}到{8}  :  {9}{0}{10}到{11}  :  {12}", Constants.vbCrLf, "00:01", "00:34", Demo("00:01", "00:34"), "01:01", "00:34", Demo("01:01", "00:34"), "00:34", "00:33",
		Demo("00:34", "00:33"), "11:34", "00:33", Demo("11:34", "00:33")));
	}
	private string Demo(string time1, string time2)
	{
		Match m1 = Regex.Match(time1, "(?<hour>[\\d]{1,2})\\:(?<minute>[\\d]{1,2})", RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
		if (m1.Success) {
			int hour1 = 0;
			int minute1 = 0;
			hour1 = int.Parse(m1.Groups["hour"].Value);
			minute1 = int.Parse(m1.Groups["minute"].Value);
			m1 = Regex.Match(time2, "(?<hour>[\\d]{1,2})\\:(?<minute>[\\d]{1,2})", RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
			if (m1.Success) {
				hour1 = int.Parse(m1.Groups["hour"].Value) - hour1;
				minute1 = int.Parse(m1.Groups["minute"].Value) - minute1;
				if (minute1 < 0) {
					minute1 += 60;
					hour1 -= 1;
				}
				if (hour1 < 0) {
					hour1 += 24;
				}
				return string.Format("{0}:{1}", hour1.ToString("D2"), minute1.ToString("D2"));
			}
		}
		return "err";
	}
	public Form1()
	{
		Load += Form1_Load;
	}
}

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧