Я пытаюсь понять, как изменить DateToStr (время Unix), когда отображается элемент массива. В настоящее время всегда отображается одно и то же время.
public class Testarray {
public static void main(String args[]) {
SimpleDateFormat format = new SimpleDateFormat("yyMMddHHmmss");
String DateToStr = format.format(new Date());
String[] anArray = {
"001,"+ DateToStr +",,F,", "001,"+ DateToStr +",,F,", "001,"+ DateToStr +",,F,"
};
for (int i =0 ;i <anArray.length;i++) {
try{
// show array element every 10sc with new date and time.
Thread.sleep(10000);
}catch(InterruptedException ex){
}
System.out.println(anArray[i]);
}
}
Токовый выход:
001,181102074606,,F,
001,181102074606,,F,
001,181102074606,,F,
Ожидаемый результат: каждый вывод должен иметь новую дату, так как он задерживается на 10 секунд.
Вы преобразуете текущую дату в строку один раз и только один раз перед циклом. Затем вы сохраняете это уникальное строковое значение три раза в массиве. Для изменения вывода вам нужно получить текущую дату и преобразовать ее в строку внутри цикла.




Переменная DateToStr является общей для всех трех записей в массиве, поэтому каждый раз она дает вам одну и ту же дату. Если вы хотите, чтобы ваша дата каждый раз была новой, вам нужно будет получить это значение в цикле перед методом сна.
Попробуй это,
SimpleDateFormat format = new SimpleDateFormat("yyMMddHHmmss");
String[] anArray = new String[3];
char c ='E';
for (int i =0 ;i <anArray.length;i++) {
try{
anArray[i]= "001,"+ format.format(new Date()) +",,"+c+",";
c++;
// show array element every 10sc with new date and time.
Thread.sleep(10000);
}catch(InterruptedException ex){
}
System.out.println(anArray[i]);
}
Спасибо, но есть одна проблема, внутри цикла for, как пройти три 3 цикла? потому что вы делаете это ниже, так как же пройти 2-й и 3-й этапы? anArray [i] = "001," + format.format (новая Дата ()) + ",, F,";
Поскольку вы используете его внутри цикла, он автоматически запускается 3 раза и присваивает значение вашему 2-му и третьему элементу массива.
Спасибо, но откуда берутся значения 2-го и 3-го итераций? потому что мы вручную кодируем первую итерацию anArray [i] = "001," + format.format (new Date ()) + ",, F,"; откуда он получает 2 других элемента: ** "001," + DateToStr + ",, F," "001," + DateToStr + ",, F," **
Итак, когда вы прогоните код всухую, он будет выглядеть следующим образом: i = 0, anArray [i] = "001" + новая форматированная дата + ",, F,". Теперь для второй итерации i = 1, anArray [i] = "001" + сформированная новая дата + ",, F", и здесь новая дата будет на 10 секунд впереди, поскольку мы переводим наш поток в спящий режим на 10 секунд. . и, наконец, i = 2, anArray [i] = "001" + сформированная новая дата + ",, F,".
Ах, я вижу, в чем путаница, эти 3 элемента - разные элементы, позвольте мне изменить код в основном разделе, чтобы прояснить, что эти 3 элемента разные, это будет так, просто для примера, я изменил символ E, F , G, чтобы показать другой элемент, а не тот же String [] anArray = {"001," + DateToStr + ",, E,", "001," + DateToStr + ",, F,", "001," + DateToStr + ",, G,"};
это путаница, все же я не получил его в массиве, он имеет ** 3 разных элемента ** "001,"+ DateToStr +",,E,","001,"+ DateToStr +",,F,","001,"+ DateToStr +",,G,", но в цикле мы предоставляем только один элемент, так как я могу передать другие 2 элемента? или я неправильно понимаю?
После изменения будут другие значения. Попробуйте этот код, как только сможете понять.
хорошо, я думаю, что всех запутал, позвольте мне закрыть этот вопрос как правильный ответ, я создам новый с правильными значениями, потому что реальные значения для элемента Array будут такими, как показано ниже String [] anArray = {"001," + DateToStr + ", F, 162948.00, A, 5153.68366, N, 00026.29111, W, 3.863, 136.93,, 1, 0,0.00% ,,;", "001," + DateToStr + ",, F, 163018.00, A , 5153.67529, N, 00026.27327, W, 8.855,121.16,, 1, 0,0.00% ,,; "," 001, "+ DateToStr +" ,, F, 163018.00, A, 5153.67529, N, 00026.27327, W, 9.855,121.16,, 2, 0,0.00% ,,; " };
Позвольте нам продолжить обсуждение в чате.
Вам необходимо обновлять значение DateToStr каждый раз при вставке.
И вставляешь сразу все. Вы читаете только с задержкой в 10 секунд.
Правильно - ждать 10 секунд между вставками и читать дату каждый раз во время вставки.
SimpleDateFormat format = new SimpleDateFormat("yyMMddHHmmss");
String[] anArray = new String[3];
for(int i = 0; i < anArray.length; ++i) {
try {
// Sleep before inserting
Thread.sleep(1000);
// Insert with new value every time
anArray[i] = "001,"+ format.format(new Date()) + ",,F,";
System.out.println(anArray[i]);
} catch (InterruptedException ex) {
}
}
Спасибо, но есть одна проблема, внутри цикла for, как пройти три 3 цикла? потому что вы делаете это ниже, так как же пройти 2-й и 3-й пункт? anArray [i] = "001," + format.format (новая Дата ()) + ",, F,";
Вы никогда не меняете значение даты. Вы устанавливаете его только один раз.