Если вам нужны миллисекунды начиная с эпохи, наиболее практично получить их от Instant
, как вы делаете.
Что касается смещения, то оно чище и лучше получить его из библиотеки:
private static final ZoneId zone = ZoneId.of("Asia/Kolkata");
public long convertToLong(LocalDateTime localDateTime) {
return localDateTime.atZone(zone).toInstant().toEpochMilli();
}
Это объясняет, почему вы используете смещение. Это также доказательство для исторических c дат (Индия не всегда использовала смещение +05: 30) и будущих дат, если индийские политики примут решение о другом смещении в будущем.
Вы можете спросить себя еще раз, действительно ли вам нужно это значение в миллисекундах? Это низкий уровень. Лучше представлять момент времени как Instant
объект или другой объект даты и времени. Разумеется, если это устаревший API вне вашего контроля, у вас нет выбора.