Здесь много правильных ответов, но я хотел добавить это (для полноты):
Если вы в нижней части файла cpp реализации выполняете явное инстанцирование всех типов, которые будут использоваться шаблоном с, компоновщик сможет найти их как обычно.
Изменить: добавление примера явного создания экземпляра шаблона. Используется после того, как шаблон определен, и определены все функции-члены.
template class vector<int>;
Это создаст экземпляр (и, следовательно, сделает доступным для компоновщика) класс и все его функции-члены (только). Подобный синтаксис работает для функций шаблона, поэтому, если у вас есть перегрузки операторов, не являющихся членами, вам может понадобиться сделать то же самое для них.
Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>
, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.
См. Анализ в зоне :
. Конструктор
blockquote>moment.tz
принимает все те же аргументы, что и конструктор момента, но использует последний аргумент в качестве часового пояса . идентификатор .Поскольку ваш ввод (
10:06 am
) не соответствует формату, признанному ISO 8601 / RFC 2822 (см.moment(String)
документы), вы должны передать параметр формата, как показано в [119 ]moment(String, String)
.Здесь живой образец:
const convertToLocalTime = (time, tz) => { const t = moment.tz(time, 'hh:mm a', tz) const localTime = t.local() return localTime; } const res = convertToLocalTime("10:06 am", 'Europe/Berlin'); console.log( res.format('hh:mm a') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data-2012-2022.min.js"></script>