14. november 2006 - 12:12
Der er
9 kommentarer og
1 løsning
Smide 52 uger ind i et array
Jeg skal have 52 uger smidt ind i et, array eller arraylist. Altså den første uge skal jo selvfølgelig være den uge vi har nu. Og så skal de næste bare smides ind i array'et, men på et tidspunkt kommer den jo til at gå fra 52/53 til 1. Nogen der har en ide til hvordan det kan laves???
14. november 2006 - 13:14
#1
Der er mange muligheder, men du kan f.eks. gøre således:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
List<int> weekNumbers = GetWeekNumbers(52);
StringBuilder stringBuilder = new StringBuilder();
foreach (int weekNumber in weekNumbers)
{
stringBuilder.AppendLine(weekNumber.ToString());
}
MessageBox.Show(stringBuilder.ToString());
}
/// <summary>
/// Gets a list of week-numbers.
/// </summary>
/// <param name="amount">How many weeks to add.</param>
/// <returns></returns>
private static List<int> GetWeekNumbers(int weeksToAdd)
{
List<int> weekNumbers = new List<int>();
DateTime dateTime = DateTime.Now;
Calendar calendar = CultureInfo.InvariantCulture.Calendar;
for (int i = 0; i < weeksToAdd; i++)
{
int weekNumber = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
weekNumbers.Add(weekNumber);
dateTime = dateTime.AddDays(7);
}
return weekNumbers;
}
15. november 2006 - 13:09
#8
MS har aldrig fået lavet ISO uge numre rigtig.
Prøv og kør følgende:
using System;
using System.Globalization;
namespace E
{
public class TimeUtil
{
public static int Week1(int year, int mon, int day)
{
return (new CultureInfo("da-DK")).Calendar.GetWeekOfYear(new DateTime(year, mon, day), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
public static int Week2(int year, int mon, int day)
{
int a = (14 - mon) / 12;
int y = year + 4800 - a;
int m = mon + 12*a - 3;
int JD = day + (153 * m + 2)/5 + 365*y + y/4 - y/100 + y/400 - 32045;
int d4 = (((JD + 31741 - JD % 7) % 146097) % 36524) % 1461;
int L = d4 / 1460;
int d1 = ((d4 - L) % 365) + L;
return d1 / 7 + 1;
}
}
public class TestClass
{
public static void Test(int year, int mon, int day)
{
Console.WriteLine((new DateTime(year, mon, day)).ToString("dddd dd/MM/yyyy") + ": " +
TimeUtil.Week1(year, mon, day) + " " +
TimeUtil.Week2(year, mon, day));
}
public static void Main(string[] args)
{
for(int y = 2002; y < 2008; y++)
{
Test(y, 12, 28);
Test(y, 12, 29);
Test(y, 12, 30);
Test(y, 12, 31);
Test(y+1, 1, 1);
Test(y+1, 1, 2);
Test(y+1, 1, 3);
Test(y+1, 1, 4);
Test(y+1, 1, 5);
Test(y+1, 1, 6);
}
Console.ReadLine();
}
}
}