我将输入作为日期,即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?
答案 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;