У вас будут обе таблицы TableA
и TableB
, так что оба объекта DataFrame
имеют столбцы с уникальными значениями в своих соответствующих таблицах, но некоторые столбцы могут иметь значения, которые происходят одновременно (имеют одинаковые значения для строки ) в обеих таблицах.
Затем мы хотим объединить строки в TableA
со строками в TableB
, которые не соответствуют ни одному в TableA
для столбца «Ключ». Концепция состоит в том, чтобы представить ее как сравнение двух серий переменной длины и комбинирования строк в одной серии sA
с другими sB
, если значения sB
не соответствуют sA
. Следующий код решает это упражнение:
import pandas as pd
TableA = pd.DataFrame([[2, 3, 4], [5, 6, 7], [8, 9, 10]])
TableB = pd.DataFrame([[1, 3, 4], [5, 7, 8], [9, 10, 0]])
removeTheseIndexes = []
keyColumnA = TableA.iloc[:,1] # your 'Key' column here
keyColumnB = TableB.iloc[:,1] # same
for i in range(0, len(keyColumnA)):
firstValue = keyColumnA[i]
for j in range(0, len(keyColumnB)):
copycat = keyColumnB[j]
if firstValue == copycat:
removeTheseIndexes.append(j)
TableB.drop(removeTheseIndexes, inplace = True)
TableA = TableA.append(TableB)
TableA = TableA.reset_index(drop=True)
Обратите внимание, что это также влияет на данные TableB
. Вы можете использовать inplace=False
и повторно назначить его на newTable
, затем TableA.append(newTable)
.
# Table A
0 1 2
0 2 3 4
1 5 6 7
2 8 9 10
# Table B
0 1 2
0 1 3 4
1 5 7 8
2 9 10 0
# Set 'Key' column = 1
# Run the script after the loop
# Table A
0 1 2
0 2 3 4
1 5 6 7
2 8 9 10
3 5 7 8
4 9 10 0
# Table B
0 1 2
1 5 7 8
2 9 10 0
В качестве альтернативы new Date().getTimezoneOffset()
и moment().format('zz')
вы также можете использовать momentjs :
var offset = moment.parseZone(Date.now()).utcOffset() / 60
console.log(offset);
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
jstimezone также довольно неудовлетворительно и не поддерживается ( https://bitbucket.org/pellepim/jstimezonedetect/issues?status=new&status=open )
Часовой пояс в часах -
var offset = new Date().getTimezoneOffset();
if(offset<0)
console.log( "Your timezone is- GMT+" + (offset/-60));
else
console.log( "Your timezone is- GMT-" + offset/60);
Если вы хотите быть точным, как вы упомянули в комментарии, тогда вы должны попробовать,
var offset = new Date().getTimezoneOffset();
if(offset<0)
{
var extraZero = "";
if(-offset%60<10)
extraZero="0";
console.log( "Your timezone is- GMT+" + Math.ceil(offset/-60)+":"+extraZero+(-offset%60));
}
else
{
var extraZero = "";
if(offset%60<10)
extraZero="0";
console.log( "Your timezone is- GMT-" + Math.floor(offset/60)+":"+extraZero+(offset%60));
}
На new Date(
) вы можете получить смещение, чтобы получить имя часового пояса, которое вы можете сделать:
new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
вы получаете значение между ()
в конец даты, то есть имя часового пояса.
Это очень хорошая работа для меня:
// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;
Вы можете использовать:
<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>
// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();
Определение часового пояса браузера довольно сложно, так как информации о браузере мало.
Moment Timezone использует Date.getTimezoneOffset()
и Date.toString()
в течение нескольких минут вокруг текущего года, чтобы собрать как можно больше информации о среде браузера. Затем он сравнивает эту информацию со всеми данными часового пояса и возвращает самое близкое соответствие. В случае связей возвращается часовой пояс с городом с наибольшей численностью населения.
console.log(moment.tz.guess()); // America/Chicago
Я искал только 3-строчную строку (например, «PDT») и попробовал ответ Маркеса, но ей пришлось немного подправить ее для поддержки кросс-браузера. К счастью, строка является последним потенциальным совпадением:)
Вот что я сделал, в CoffeeScript:
browserTimezone = ->
userDate = new Date()
zoneMatches = userDate.toString().match(/([A-Z][A-Z][A-Z])/g)
userZone = zoneMatches[zoneMatches.length - 1]
Работает в IE8, IE9, Safari 9, Firefox 44 и Chrome 48 [/ д2]
function getLocalTimeZone() {
var dd = new Date();
var ddStr = dd.toString();
var ddArr = ddStr.split(' ');
var tmznSTr = ddArr[5];
tmznSTr = tmznSTr.substring(3, tmznSTr.length);
return tmznSTr;
}
Пример: Чт 21 июня 2018 18:12:50 GMT + 0530 (стандартное время в Индии)
O / P: +0530
Уже ответили, как получить смещение в минутах как целое число, но в случае, если кто-то хочет, чтобы локальное смещение по часовой стрелке как строка, например. "+1130"
:
function pad(number, length){
var str = "" + number
while (str.length < length) {
str = '0'+str
}
return str
}
var offset = new Date().getTimezoneOffset()
offset = ((offset<0? '+':'-')+ // Note the reversed sign!
pad(parseInt(Math.abs(offset/60)), 2)+
pad(Math.abs(offset%60), 2))
pad(parseInt(Math.abs(offset/60)), 2)
, чтобы все было правильно ... иначе вы могли бы получить +5.530, как в моем случае ... im не уверен, что математический пол и т. Д. Будет лучше здесь или нет ... но это по крайней мере дает мне +0530, как и ожидалось
– Abhinav Singh
30 June 2012 в 17:16
Вы просто хотите включить moment.js и jstz.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script>
, после чего
<script>
$(function(){
var currentTimezone = jstz.determine();
var timezone = currentTimezone.name();
alert(timezone);
});
</script>
try getTimezoneOffset()
объекта Date
:
var curdate = new Date()
var offset = curdate.getTimezoneOffset()
Этот метод возвращает смещение часового пояса в минутах, что является разницей между GMT и местным временем в минутах.
Если вам нужно только аббревиатура часового пояса «MST» или «EST»:
function getTimeZone(){
var now = new Date().toString();
var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis
return timeZone;
}
z
и zz
устарели с 1.6.0, см. momentjs.com/docs / # / display / format
– MrUpsidown
25 September 2014 в 14:12
Используйте это, чтобы преобразовать OffSet в положительное:
var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);
Я понимаю, что этот ответ немного не соответствует теме, но я думаю, что многие из нас, которые ищут ответ, также хотели отформатировать часовой пояс для отображения и, возможно, получить аббревиатуру зоны. Итак, вот оно ...
Если вы хотите, чтобы часовой пояс клиента был хорошо отформатирован, вы можете положиться на метод JavaScript Date.toString и делать:
var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];
Это даст вам " GMT-0400 (EST) ", например, включая минуты времени, когда это применимо.
В качестве альтернативы, с регулярным выражением вы можете извлечь любую желаемую часть:
Для «GMT-0400 (EDT)»:
new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]
Для «GMT-0400 ":
new Date().toString().match(/([A-Z]+[\+-][0-9]+)/)[1]
Для просто« EDT »:
new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1]
Только для« -0400 »:
new Date().toString().match(/([-\+][0-9]+)\s/)[1]
Ссылка Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString
split[4] + " " + split[5]
?!
– Christophe Roussy
22 October 2013 в 10:09
new Date().toString()
полностью зависит от ваших настроек локали. Ожидание результатов других клиентов, похожих на ваши, - очень плохая идея.
– Octopus
12 October 2017 в 21:22
Я написал функцию в моем проекте, которая возвращает часовой пояс в формате hh:mm
. Я надеюсь, что это может кому-то помочь:
function getTimeZone() {
var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}
// Outputs: +5:00
function getTimeZone() {
var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}
// See output
document.write(getTimeZone());
См. этот результирующий оператор был противоположным часовому поясу. Используйте некоторую математическую функцию, затем проверяйте число меньше или больше.
var a = new Date().getTimezoneOffset();
var res = -Math.round(a/60)+':'+-(a%60);
res = res < 0 ?res : '+'+res;
console.log(res)
Это выполнит задание.
var time = new Date(),
timestamp = Date(1000 + time.getTime());
console.log(timestamp);
Thu May 25 2017 21:35:14 GMT+0300 (IDT)
undefined
Это значение с компьютера пользователя, и его можно изменить в любое время, поэтому я думаю, что это не имеет значения, я просто хочу получить приблизительное значение и затем преобразовать его в GMT на моем сервере.
Например, я из Тайваня, и он возвращает «+8» для меня.
JS
function timezone() {
var offset = new Date().getTimezoneOffset();
var minutes = Math.abs(offset);
var hours = Math.floor(minutes / 60);
var prefix = offset < 0 ? "+" : "-";
return prefix+hours;
}
$('#result').html(timezone());
HTML
<div id="result"></div>
Результат
+8
вы можете просто попробовать это. он вернет вам текущее машинное время
blockquote>
var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())
JavaScript:
var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);
getTimezoneOffset
недействительным? Статья, о которой вы говорите, датирована июнем 2007 года и не содержит сведений о том, как функция является неточной. И на самом деле библиотекаjsTimezoneDetect
, которую вы указали, используетgetTimezoneOffset
. – Mike 15 November 2013 в 19:03var hrs = -(new Date().getTimezoneOffset() / 60)
, чтобы получить смещение в часах, обычно используемых – Edwin Daniels 1 May 2015 в 18:20