如何从TimeSpan中删除秒?

时间:2019-02-07 16:29:16

标签: c# xamarin xamarin.forms

xamarin中的入门者。试图将时间显示为HH:mm,而未添加秒。它在我的表单上显示为示例12:30:00,我希望为12:30。我是否需要更改日期时间功能,代码当前正在运行,但仍将时间显示为小时,分钟,秒。

该代码还应允许最快的时间出现在顶部,但似乎也没有这样做。

    void FindNextDue(ObservableCollection<UserMedDosagePayLoad> medtimes)
    {
        UserMedTimesFilteredList.Clear();

        int nowHour = DateTime.Now.Hour;
        int nowMinutes = DateTime.Now.Minute;
        TimeSpan now = new TimeSpan(nowHour, nowMinutes, 0);

        foreach (UserMedDosagePayLoad item in medtimes)
        {
            item.Nextduemessage = item.Dosage + " " + item.Dosageunit + 
                "due at " + item.Time;

            string[] DT = item.Time.Split(':');

            if (DT[0] != null)
            {
                int hr = Convert.ToInt32(DT[0]);
                int minutes = Convert.ToInt32(DT[1]);
                TimeSpan medTime = new TimeSpan(hr, minutes, 0);
                TimeSpan comparison = now.Subtract(medTime).Negate();

                TimeSpan TwentyFourHour = new TimeSpan(24, 0, 0);

                if (comparison.TotalMilliseconds <0)
                {
                    comparison = TwentyFourHour.Add(comparison);
                }

                TimeComparison.Add(comparison);                    
            }
        }

        //Order the collection of times so the next due is always first
        TimeComparison = new List<TimeSpan>(TimeComparison.OrderBy(h => h.Hours)
            .ThenBy(m => m.Minutes));

        List<string> UserMedIDs = new List<string>();

        for (int i = 0; i < TimeComparison.Count(); i++)
        {
            DateTime NextDue = DateTime.Now.Add(TimeComparison[i]);
            DateTime NextDueToCompare = new DateTime(NextDue.Year, NextDue.Month, 
                NextDue.Day, NextDue.Hour, NextDue.Minute, 0);

            string NextDueComparisonString = NextDueToCompare.ToString("HH:mm:ss");

            foreach (UserMedDosagePayLoad item in UserMedTimes)
            {
                if (item.Time == NextDueComparisonString && 
                    !UserMedIDs.Contains(item.Usermedid))
                {
                    UserMedTimesFilteredList.Add(item);
                    UserMedIDs.Add(item.Usermedid);
                }
            }

            UserMedTimes = medtimes;
            MedicationList.ItemsSource = UserMedTimesFilteredList;
            BusyIndicator.IsRunning = false;                            
        }
    }

2 个答案:

答案 0 :(得分:2)

如果只希望显示小时和分钟,则从格式字符串中删除“ ss”

string NextDueComparisonString = NextDueToCompare.ToString("HH:mm:ss");

在这里,您没有指定任何格式,因此使用的是默认格式

item.Nextduemessage = item.Dosage + " " + item.Dosageunit + 
            "due at " + item.Time;

指定这样的格式

item.Nextduemessage = item.Dosage + " " + item.Dosageunit + 
            "due at " + item.Time.ToString("HH:mm");

答案 1 :(得分:1)

如果根本不想看秒,请使用格式设置(例如12:48)。

该方法获取TimeSpan obj,然后以字符串形式返回时间,不带秒。

阅读此处以了解有关格式化的更多信息。

自定义功能

public string GetTimeSpanWithoutSeconds(TimeSpan input)
{
    return input.ToString(@"hh\:mm");
}

“ hh”自定义格式说明符

将小时表示为01到12之间的数字;也就是说,小时是用12小时制来表示的,该时钟对自午夜或中午以来的整个小时进行计数。午夜后的特定小时与中午后的同一小时没有区别。小时不会四舍五入,单位小时的格式为前导零。例如,给定早上或下午5:43的时间,此格式说明符将显示“ 05”。

“ mm”自定义格式说明符

将分钟表示为00到59之间的数字。分钟表示自上一小时以来经过的整分钟。分钟数字以前导零表示。