c# - 如何从 TimeSpan 中删除秒数?

标签 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;                            
        }
    }

最佳答案

如果您只想显示小时和分钟,请从您的格式字符串中删除“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");

关于c# - 如何从 TimeSpan 中删除秒数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54577918/

相关文章:

c# - 从数据库中获取一个数据单元格

c# - 如何将 .NET 图像或字节数组转换为 Emgu.CV.Image<Emgu.CV.Structure.Bgr , byte >

c# - 流畅的 Nhibernate 一对一非主键映射

c# - StatusBar 和 MasterDetailPage Xamarin.Forms Android 之间出现白条

ios - Xamarin 表格 : Camera picture is left rotated when comes to UI in IOS

c# - 网址没有命中任何 Action

c# - 在 Xamarin 中停止 WebView

xamarin - 如何在xamarin表单的工具栏中添加选择器

visual-studio - 如何使用 Google API 的第 3 版通过 VS 2019 部署到 Google 商店

c# - 在 Xamarin.Forms MVVM 应用程序中加载数据的位置?