Ввод/вывод и Культура при работе с числами
<b>Ввод/вывод</b>
Для ввода/вывода на C# не всегда достаточно стандартных методов Console.ReadLine, String.Split иConsole.WriteLine. В некоторых задачах потребуется собственная быстрая реализация разбора входных данных и форматирования выходных.
В некоторых задачах числа разделяются не ровно одним пробелом. Поэтому вместо
Console.ReadLine().Trim().Split(' ')
следует использовать
Console.ReadLine().Split(new char[] {' ', '\t'}, StringSplitOptions.RemoveEmptyEntries)
Не забывайте, что культура по умолчанию может быть любой.
Это важно, если вам требуется считать или вывести число с плавающей точкой: разделитель целой и дробной части может быть задан в системе как «.» или как «,».
В настоящий момент на сервере настроен разделитель «.», однако это может измениться в будущем.
Чтобы не сталкиваться с подобными проблемами, указывайте культуру явно при каждой операции ввода/вывода или установите культуру по умолчанию для всей своей программы:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Хитрости при работе с датой и временем:
http://blog.vkuznetsov.ru/posts/2011/09/18/malenkie-chudesa-csharp-net-datetime-s-dopolnitelnymi-preimushhestvami#.UtfINsbIZHQ
int yr = DateTime.Today.Year;
int mth = DateTime.Today.Month;
// начало текущего месяца
DateTime firstDay = new DateTime(yr, mth, 1);
deStart.Date = firstDay;
// конец текущего месяца
DateTime lastDay = new DateTime(yr, mth, DateTime.DaysInMonth(yr, mth));
deEnd.Date = lastDay;
// получить дату начала недели
DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
// получить дату субботы
DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);
public static class DateTimeExtensions
{
public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
{
int diff = dt.DayOfWeek - startOfWeek;
if (diff < 0)
{
diff += 7;
}
return dt.AddDays(-1 * diff).Date;
}
}