我希望C#中的分割结果为两位数

时间:2018-02-17 12:59:35

标签: c# datetime

我将输入作为日期,即dd / mm / yyyy。我希望输出为yyww.d ,其中yy是年份,ww是周数,d是星期几。 这是我的代码。

st1 = drDataTask[0]["text_value"].ToString();
if (Math.Max(st1.IndexOf('M'), 0) != 0)
{
    dt1 = Convert.ToDateTime(st1.Substring(0, Math.Max(st1.IndexOf('M') + 1, 0))).ToString("yy");
    dt2 = Convert.ToDateTime(st1.Substring(0, Math.Max(st1.IndexOf('M') + 1, 0))).DayOfYear / 7;
    dt3 = Convert.ToInt16(Convert.ToDateTime(st1.Substring(0, Math.Max(st1.IndexOf('M') + 1, 0))).DayOfWeek);
    rowPublishData[27] = dt1 + dt2 + "." + dt3;
 }

如果周数为6,年份为2018年,而日期为周二,则输出应为1806.2 我得到输出为186.2 如何将输出作为yyww.d而不是yyw.d?

4 个答案:

答案 0 :(得分:2)

DateTime dt = DateTime.ParseExact(st1, "dd/mm/yyyy", CultureInfo.InvariantCulture);
var weekOfYear = Calendar.GetWeekOfYear(dt);
var dayOfWeek = (int)dt.DayOfWeek;
var dayOfWeekValue = dayOfWeek.ToString().PadLeft(2, '0');

var result = dt.ToString("yy") + weekOfYear + dayOfWeak;

答案 1 :(得分:2)

一周开始的时间和地点因国家/地区和年份而异。有时新年的前几天属于去年的第53周,有时则不是。

有一些方法可以在System.Globalisation命名空间内处理这种不同类型的日历设置。日历还会根据您申请的年份和规则告诉您哪一周您在给定的DateTime中。

您可以在此处阅读:Calendar.GetWeekOfYear()

或试试这个:

using System; 
using System.Globalization; 

public class Program
{
    public static void Main()
    {
        var dt = DateTime.Now;

        DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
        Calendar cal = dfi.Calendar;

        var yourFormat = string.Format(
            "{0:yy}{1:00}.{2:d}"
            , dt
            , cal.GetWeekOfYear(dt,CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Sunday)
            , dt.DayOfWeek )

        Console.WriteLine(yourFormat);
    } 
}

我假设星期天是你的第0天,因为你的例子提到星期二是第2天。

使用此方法输出的2000年1月1日至2020年的格式为:

1/1/2000 12:00:00 AM => 0052.6 // this should probaby be 9952.6 
1/1/2001 12:00:00 AM => 0101.1
1/1/2002 12:00:00 AM => 0201.2
1/1/2003 12:00:00 AM => 0301.3
1/1/2004 12:00:00 AM => 0453.4 // this should probaby be 0353.4
1/1/2005 12:00:00 AM => 0552.6 // this should probaby be 0452.6
1/1/2006 12:00:00 AM => 0601.0
1/1/2007 12:00:00 AM => 0701.1
1/1/2008 12:00:00 AM => 0801.2
1/1/2009 12:00:00 AM => 0953.4 // this should probaby be 0853.4
1/1/2010 12:00:00 AM => 1052.5 // this should probaby be 0953.5
1/1/2011 12:00:00 AM => 1152.6 // this should probaby be 1053.6
1/1/2012 12:00:00 AM => 1201.0
1/1/2013 12:00:00 AM => 1301.2
1/1/2014 12:00:00 AM => 1401.3
1/1/2015 12:00:00 AM => 1553.4  // this should probaby be 1453.4
1/1/2016 12:00:00 AM => 1652.5  // this should probaby be 1552.5
1/1/2017 12:00:00 AM => 1701.0
1/1/2018 12:00:00 AM => 1801.1
1/1/2019 12:00:00 AM => 1901.2

要修复输出年份,如果您的周数> = 52,则需要减去1年:

var week = cal.GetWeekOfYear(dt, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday);
var fixOutputYear = week >= 52 ? -1 : 0;

Console.WriteLine(
    string.Format("{3} => {0:yy}{1:00}.{2:d}"
                  , dt.AddYears(fixOutputYear)
                  , week
                  , dt.DayOfWeek
                  , dt));

答案 2 :(得分:0)

您只需在dt2上使用custom number format即可确保它始终为2位数字:

int dt2 = 6;
dt2.ToString("00")

// output "06"

答案 3 :(得分:0)

快速解决方案:

替换

rowPublishData[27] = dt1 + dt2 + "." + dt3;

使用

rowPublishData[27] = dt1 + dt2.ToString("00") + "." + dt3;