Начну с того, что я открыт для других предложений, если есть более простой способ сделать это. Моя цель - ежедневно обновлять CSV-файл с данными о запасах в 9:00 и 16:00 EST (не мой часовой пояс). Я чувствую, что я очень близко. Теперь у меня есть функция getEST, которая извлекает текущее время в часовом поясе EST (должным образом учитывает переход на летнее время) и возвращает логическое значение true / false, если это время соответствует времени открытия или закрытия, которое я зафиксировал. У меня также есть программа, создающая файл CSV и добавляющая к нему каждый раз. Мне нужно внести некоторые изменения в мой код, чтобы он автоматически выполнял мой код извлечения данных, когда эти логические флаги выводятся как true.
Я настроил его прямо сейчас, чтобы использовать счетчик сброса и сказать, что нужно подождать 7 или 17 часов в зависимости от значения этого счетчика. Поэтому мой вопрос: а) лучше ли сделать sh сброс, когда часы EST достигнут полуночи? и б) Как мне запустить программу в любое время, чтобы она выводилась в нужное время (т. е. если приложение запускается в 6 EST, оно ждет 3 часа, прежде чем извлекать данные?
Я снимаю фрагмент кода немного, так как у меня много. Дайте мне знать, будет ли полезна какая-то пропущенная часть. Я знаю, что моя инкапсуляция также может быть улучшена, просто сначала хочу, чтобы она работала, а затем измените больше переменных на private после.
public class Scheduler {
//Declare common variables
static int reset = 0;
public static void main(String[] args) {
//Manual implementation for testing purposes
DJIA obj = new DJIA();
EST tu = new EST();
obj.getDJIA();
tu.getEST();
try {
obj.createCSV();
} catch (IOException e) {
e.printStackTrace();
}
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
Runnable runnable = new Runnable() {
public void run()
{
//Moving implementation code here causes program to wait 7 hours before executing
}
};
// Execute program at 9 am EST and 4 pm EST
if(reset == 0) {
service.schedule(runnable, 7, TimeUnit.HOURS);
reset ++;
}
else {
service.schedule(runnable, 17, TimeUnit.HOURS);
reset = 0;
}
}
}
public class EST {
//Make time strings usable by main class
public String est;
public String o_time;
public String c_time;
public boolean marketOpen;
public boolean marketClose;
//Gets timezone in EST
public void getEST() {
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("EST5EDT"));
est = dateFormat.format(new Date());
checkTime();
//System.out.println("Current time (EST): " + est);
//System.out.println("Is it 9 am EST? " + marketOpen);
}
//Check if the stock market is open or not, returning a boolean indicator
public void checkTime() {
o_time = "09:00:00";
c_time = "16:00:00";
if(est.equals(o_time)) {
marketOpen = true;
}
else {
marketOpen = false;
}
if(est.equals(c_time)) {
marketClose = true;
}
else {
marketClose = false;
}
}
}
//Snipet from DJIA class
public void makeCSV() throws IOException {
//Create output file only if it does not already exist
File f = new File("DJIA.csv");
path = Paths.get("C:\\Users\\zrr81\\eclipse-workspace\\SelTest\\DJIA.csv");
if(!f.exists()) {
try {
//Create FileWriter object with file as parameter
String fid = "DJIA.csv";
CSVWriter writer = new CSVWriter(new FileWriter(fid, true));
String[] headers = "Stock, Opening Price, Closing Price".split(",");
writer.writeNext(headers);
writer.close();
}catch (Exception ex) {
ex.printStackTrace();
}
}
else {
}
}
public void createCSV() throws IOException {
//Insert if else logic to import to proper array
makeCSV();
o_values.add(stock);
o_values.add("test");
c_values.add("#Empty");
c_values.add("test");