недопустимый аргумент типа «- >» (есть «fd_set»)

tl; dr

A java.util.Date и Instant оба представляют момент в UTC. Другие часовые пояса и смещения не имеют значения.

Instant instant = myJavaUtilDate.toInstant() 

Как я могу преобразовать объект даты, который уже находится в UTC, в объект OffsetDateTime в самом UTC в Java?

необходимо OffsetDateTime. Используйте Instant, как показано выше.

Используйте ZonedDateTime, а не OffsetDateTime

Вам не нужно OffsetDateTime. Смещение-от-UTC - это всего лишь несколько часов и минут. Ни больше ни меньше. Напротив, часовой пояс - это история прошлых, настоящих и будущих изменений в смещении, используемом людьми определенного региона. Поэтому часовой пояс, если он известен, всегда предпочтительнее простого смещения. Поэтому используйте ZonedDateTime, а не OffsetDateTime, где это возможно.

Используйте OffsetDateTime только при задании смещения от UTC, например +02:00, без контекста определенного часового пояса, например Europe/Paris.

Преобразуйте Date в Instant

Если дано java.util.Date, то концерт с современным классом (Instant) заменил этот неприятный старый класс. Оба представляют момент в UTC как счетчик с той же эпохальной ссылки первого момента 1970 года в UTC. Современный класс разрешается наносекундами, а не миллисекундами. Чтобы преобразовать, вызовите новые методы, добавленные в старый класс.

Instant instant = myJavaUtilDate.toInstant() ;

Помните, что оба java.util.Date и Instant всегда представляют собой момент в UTC.

Захватить текущий момент, «сейчас»

Захватить текущий момент в UTC.

Instant instant = Instant.now() ;

now () и другие вещи исключены, я думаю.

Нет, вы всегда можете зафиксировать текущий момент, вызвав Instant.now() на любой машине в любое время. Текущий часовой пояс JVM по умолчанию не имеет значения, так как Instant всегда всегда в UTC.

Откорректируйте с UTC в другой часовой пояс. То же самое время, та же точка на временной шкале, разное время настенных часов. & lt; - Это наиболее важная концепция для понимания в этом обсуждении!

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone() ;

В качестве ярлыка вы можете пропустить Мгновенное действие при захвате текущего момента.

ZonedDateTime zdt = ZonedDateTime.now( z ) ;

Вернитесь в UTC, извлекая объект Instant.

Instant instant = zdt.toInstant() ; 

Совет: Фокусировка на UTC

Обычно лучше всего выполнять большую часть своей работы в UTC. При хранении, протоколировании, отладке или обмене моментом используйте UTC. Забудьте о своем собственном ограниченном часовом поясе во время работы в качестве программиста или системного администратора; научиться думать в UTC. Сделайте второй клик в своем офисе, установленном в UTC.

Избегайте периодического переключения между часовыми поясами. Вставить UTC. Отрегулируйте часовой пояс только при представлении пользователю или при необходимости бизнес-логики.

1
задан Шах 19 January 2019 в 09:45
поделиться

2 ответа

Вы пропускаете &, т.е. вам нужен адрес структуры данных, например,

#include <sys/select.h>

struct descs {
  fd_set a;
};

void func(struct descs *d) {
  FD_ZERO(&d->a);
}
0
ответ дан Stefan Becker 19 January 2019 в 09:45
поделиться

Из человек выбирает макросы FD_ *, на которые они указывают на fd_set:

   void FD_CLR(int fd, fd_set *set);
   int  FD_ISSET(int fd, fd_set *set);
   void FD_SET(int fd, fd_set *set);
   void FD_ZERO(fd_set *set);

Вы должны передавать указатели на функции (макросы), а не на значения. Вы можете использовать оператор address-of :

FD_ZERO(&fd->read);
FD_SET(STDIN_FILENO, &fd->read);
FD_SET(srv->sock, &fd->read);

и т. Д.

0
ответ дан Kamil Cuk 19 January 2019 в 09:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: