Как насчет этого:
await Task.WhenAll(tasks1);
var gainStrings = tasks1.Select(t => t.Result).ToList();
Подождите, пока все задачи закончатся, а затем извлеките результаты. Это идеально, если вам все равно, в каком порядке они закончены.
EDIT2: Еще лучший способ:
var gainStrings = await Task.WhenAll(tasks1);
Просто упомянуть: SimpleDateFormat
- это старый способ форматирования дат, который, кстати, не является поточно-ориентированным. Начиная с Java 8 появились новые пакеты с именами java.time
и java.time.format
, и вы должны использовать их для работы с датами. Для ваших целей вы должны использовать класс ZonedDateTime Сделайте что-то вроде этого:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("..."));
, чтобы узнать правильный идентификатор зоны для Японии, используйте
ZoneId.getAvailableZoneIds()
Позже для форматирования Ваш Date правильно использует класс DateTimeFormatter
Хитрость заключается в использовании java.time.format.FormatStyle.LONG
:
jshell> java.time.format.DateTimeFormatter.ofLocalizedDate(java.time.format.FormatStyle.LONG).withLocale(java.util.Locale.JAPAN)
$13 ==> Localized(LONG,)
jshell> java.time.LocalDate.now().format($13)
$14 ==> "2019年1月17日"
Это сработало для меня:
public static void main(String[] args) throws IOException {
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN);
Date today = new Date();
System.out.printf("%s%n", dateFormat.format(today));
}
и MEDIUM
действовали именно так, как вы сказали
UPD: или использовали более новый ZonedDataTime , как предложил Майкл Гантман: 116]
public static void main(String[] args) throws IOException {
ZonedDateTime zoned = ZonedDateTime.now();
DateTimeFormatter pattern = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(Locale.JAPAN);
System.out.println(zoned.format(pattern));
}