A java.util.Date
и Instant
оба представляют момент в UTC. Другие часовые пояса и смещения не имеют значения.
Instant instant = myJavaUtilDate.toInstant()
Как я могу преобразовать объект даты, который уже находится в UTC, в объект OffsetDateTime в самом UTC в Java?
blockquote>необходимо
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 () и другие вещи исключены, я думаю.
blockquote>Нет, вы всегда можете зафиксировать текущий момент, вызвав
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. Отрегулируйте часовой пояс только при представлении пользователю или при необходимости бизнес-логики.
Вы пропускаете &
, т.е. вам нужен адрес структуры данных, например,
#include <sys/select.h>
struct descs {
fd_set a;
};
void func(struct descs *d) {
FD_ZERO(&d->a);
}
Из человек выбирает макросы 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);
и т. Д.