Мне нужно было сделать что-то подобное для перечислений. Я имею переменную и хочу ее протестировать против диапазонов значений.
Здесь я использовал вариационную функцию шаблона. Обратите внимание на специализацию для типа const char*
, так что is_in( my_str, "a", "b", "c")
имеет ожидаемый результат, когда my_str
сохраняет "a"
.
#include <cstring>
template<typename T>
constexpr bool is_in(T t, T v) {
return t == v;
}
template<>
constexpr bool is_in(const char* t, const char* v) {
return std::strcmp(t,v);
}
template<typename T, typename... Args>
constexpr bool is_in(T t, T v, Args... args) {
return t==v || is_in(t,args...);
}
Пример использования:
enum class day
{
mon, tues, wed, thur, fri, sat, sun
};
bool is_weekend(day d)
{
return is_in(d, day::sat, day::sun);
}
Ответ на neuhaus верен.
Если вы имели в виду, что вы изменили часовой пояс вашей операционной системы хоста во время выполнения этого кода, знайте, что виртуальная машина Java (JVM ) имеет свой текущий текущий часовой пояс по умолчанию.
Обычно это значение по умолчанию выбирается из того, что принадлежит ОС хоста. Если это так, то это означает, что ваша реализация Java обнаруживает часовой пояс хоста только при запуске и не проверяет последующие изменения часового пояса хоста.
Часовой пояс вашего JVM также можно установить в качестве параметра конфигурации при запуске. В этом случае я должен подумать, что JVM намеренно игнорирует изменения часовых поясов ОС хоста.
Любой Java-код в любом потоке любого приложения в этой JVM может изменить текущий часовой пояс JVM в любой момент во время выполнения. Опять же, я должен подумать, что JVM намеренно игнорирует изменения часовых поясов ОС хоста.
Класс doc для java.util.TimeZone.getDefault()
описывает шаги, связанные с определением текущего часового пояса по умолчанию.
Если кешированный по умолчанию TimeZone доступен, его клон возвращается. В противном случае метод принимает следующие шаги для определения часовой пояс по умолчанию.
• Используйте значение свойства
user.timezone
в качестве идентификатора часового пояса по умолчанию, если оно доступно.• Обнаружить идентификатор зоны платформы. Источник отображения часового пояса платформы и идентификатора может отличаться в зависимости от реализации.
• Используйте GMT в качестве последнего средства, если данный или обнаруженный идентификатор часового пояса неизвестен.
По умолчанию TimeZone созданный из идентификатора, кэшируется, и возвращается его клон. Значение свойства
blockquote>user.timezone
установлено на идентификатор по возврату.В моем чтении это говорит, что JVM не собирается обнаруживать какие-либо изменения в настройке хост-OS. После запуска и после определения по умолчанию он сохраняется в этом свойстве
user.timezone
(и в кеше) до тех пор, пока не будет изменен с вызовом наsetDefault
.java.time
Вы используете старый класс java.util.Date, который был вытеснен java.time framework в Java 8.
Используйте класс
java.time.ZonedDateTime
и укажите желаемый / ожидаемый часовой пояс.ZoneId zoneId = ZoneId.of( " America/Montreal" ); ZonedDateTime zdt = ZonedDateTime.now( ZoneId );
Вы почти никогда не должны зависеть от текущего часового пояса JVM (или текущего по умолчанию
Locale
).
Часовой пояс является частью среды процесса. Изменение глобального часового пояса для вашей системы влияет только на новые процессы.
См. Также Как установить часовой пояс java.util.Date?:
Имейте в виду, что объекты java.util.Date не содержат информацию о часовом поясе сами по себе - вы не можете установить часовой пояс для объекта Date. Единственное, что содержит объект Date, - это количество миллисекунд с момента «эпохи» - 1 января 1970 года, 00:00:00 UTC.
Как показывает ZZ Coder, вы устанавливаете часовой пояс для объекта DateFormat , чтобы указать, в какой часовой пояс вы хотите отображать дату и время.
blockquote>
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
//Instantiate a Date object
Date date = new Date();
//display time and date using toString()
System.out.println(date.toString());
}
}