DailyValues
в качестве возвращаемого типа. Это похоже на DateTime.FromBinary
и т. Д.
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
namespace CsvDemo
{
class Program
{
static void Main(string[] args)
{
List<DailyValues> values = File.ReadAllLines("C:\\Users\\Josh\\Sample.csv")
.Skip(1)
.Select(v => DailyValues.FromCsv(v))
.ToList();
}
}
class DailyValues
{
DateTime Date;
decimal Open;
decimal High;
decimal Low;
decimal Close;
decimal Volume;
decimal AdjClose;
public static DailyValues FromCsv(string csvLine)
{
string[] values = csvLine.Split(',');
DailyValues dailyValues = new DailyValues();
dailyValues.Date = Convert.ToDateTime(values[0]);
dailyValues.Open = Convert.ToDecimal(values[1]);
dailyValues.High = Convert.ToDecimal(values[2]);
dailyValues.Low = Convert.ToDecimal(values[3]);
dailyValues.Close = Convert.ToDecimal(values[4]);
dailyValues.Volume = Convert.ToDecimal(values[5]);
dailyValues.AdjClose = Convert.ToDecimal(values[6]);
return dailyValues;
}
}
}
Конечно, вы все еще можете добавить конструктор по умолчанию, и вы захотите добавить обработку исключений в случае сбоя анализа (вы также можете использовать TryParse
для этого).
File.ReadAllLines
считывает все строки из файла CSV в массив строк. .Skip(1)
пропускает строку заголовка. .Select(v => DailyValues.FromCsv(v))
использует Linq для выбора каждой строки и создания нового экземпляра DailyValues
с использованием метода FromCsv
. Это создает тип System.Collections.Generic.IEnumerable<CsvDemo.DailyValues>
. .ToList()
обращается к IEnumerable
с List
, чтобы соответствовать типу, который вы хотите. Вместо использования Linq вы могли бы просто использовать цикл foreach
, чтобы добавить каждый экземпляр DailyValues
в свой список.
Используйте java.util.Calendar .
Date today = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(today);
cal.add(Calendar.DAY_OF_MONTH, -30);
Date today30 = cal.getTime();
cal.add(Calendar.DAY_OF_MONTH, -60);
Date today60 = cal.getTime();
cal.add(Calendar.DAY_OF_MONTH, -90);
Date today90 = cal.getTime();
не уверен, откуда вы берете данные, но чтобы вычислить дату то есть через 30 дней вы можете использовать функцию добавления класса Calendar следующим образом:
c.add (Calendar.DAY_OF_MONTH, -30); // предполагая, что c имеет тип java.util.Calendar
Теперь, чтобы выяснить, находится ли конкретная дата между сегодняшним днем и 30 днями назад, вы можете использовать функции before () и after (), чтобы выяснить, была ли дата раньше сегодня, но после 30-го дня до сегодняшнего дня.
Честно говоря, я рекомендую вам использовать Joda в качестве библиотеки даты и времени. Он не только имеет превосходный API, но и понимает (т.е. имеет классы для) такие понятия, как периоды, продолжительность и тому подобное.