Según esta respuesta, estoy buscando una manera de obtener la fecha de mañana y el número de la próxima semana para usar en la aplicación Tasker , Run Shell Command .
Yo he tratado:
date -d '+1 day' +"%Y%m%d"
y similares, pero todavía estoy recibiendo Error: 1
.
En el emulador de shell obtengobad date '+1 day'
No se puede encontrar ninguna referencia de comandos de shell de Android o man.
Algunas guías recomiendan usar la variable %TIMES, pero no estoy seguro de cómo hacerlo.
Lo descubrí, tuve que aprender a usar Tasker un poco, la solución es un poco incómoda, pero probablemente debería hacerse de esta manera en Tasker.
La variable más importante para tales manipulaciones de fecha y hora en Tasker es una variable global %TIMES
que contiene la hora actual en segundos, por lo que es un número entero grande y largo.
Agregar, por ejemplo, 30 días significa que necesita establecer una variable (con matemáticas activadas) de esta manera:
%TIMES + (30 * 86400)
mañana es:
%TIMES + (1 * 86400)
El problema principal es que debe convertir el valor en una cadena de fecha y hora formateada. Tal como lo entendí, no hay un comando integrado para eso en Tasker.
Debe crear un paso de tarea de JavaScriptlet para eso y pegar allí el código de esta página :
<TaskerData sr="" dvi="1" tv="4.1b1m">
<Task sr="task54">
<cdate>1340586441681</cdate>
<edate>1369445351826</edate>
<id>54</id>
<nme>getFormattedDate</nme>
<pri>10</pri>
<rty>2</rty>
<Action sr="act0" ve="3">
<code>129</code>
<Str sr="arg0" ve="3">var gsMonthNames = new Array(
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
);
var gsDayNames = new Array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
);
var d = new Date(par[0] * 1000);
var f = par[1];
var formatteddate = f.replace(/(yyyy|yy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
function($1)
{
switch ($1)
{
case 'yyyy': return d.getFullYear();
case 'yy': return ('0' + d.getFullYear()).slice(-2);
case 'mmmm': return gsMonthNames[d.getMonth()];
case 'mmm': return gsMonthNames[d.getMonth()].slice(0,3);
case 'mm': return ('0' + (d.getMonth() + 1)).slice(-2);
case 'dddd': return gsDayNames[d.getDay()];
case 'ddd': return gsDayNames[d.getDay()].slice(0,3);
case 'dd': return ('0' + d.getDate()).slice(-2);
case 'hh': return ('0' + ((h = d.getHours() % 12) ? h : 12)).slice(-2);
case 'HH': return ('0' + d.getHours()).slice(-2);
case 'nn': return ('0' + d.getMinutes()).slice(-2);
case 'ss': return ('0' + d.getSeconds()).slice(-2);
case 'a/p': return d.getHours() < 12 ? 'a' : 'p';
}
}
);</Str>
<Str sr="arg1" ve="3">45</Str>
<Int sr="arg2" val="1"/>
<Int sr="arg3" val="45"/>
</Action>
<Action sr="act1" ve="3">
<code>126</code>
<Str sr="arg0" ve="3">%formatteddate</Str>
<Int sr="arg1" val="1"/>
</Action>
</Task>
</TaskerData>
antes de ese paso de Javascriptlet, inserta 2 pasos donde establece dos variables de entrada %par1
(contiene fecha y hora en segundos del paso anterior) y %par2
(contiene yyyymmdd
- formato de fecha).
La cadena de fecha formateada está disponible entonces en %formatteddate
variable.
En cuanto a recibir la próxima semana:
date -d +"%Y"
para%year
date -d +"%V"
para%week
%week
en %week + 1
(Hacer matemáticas en)%year
en %year + 1
(Hacer matemáticas en) (Si %week > 52
)%week
en 1
(si %week > 52
)yyyyww.htm
de la próxima semana se puede escribir como%year%week.htm
Dada una variable %mytimestamp
establecida en una marca de tiempo de época, puede usar esto en su acción de shell:
date -d @%mytimestamp +%Y%m%d
Tenga en cuenta el @
antes%mytimestamp
$ adb shell
$ date --version
toybox 0.7.4-android
$ date --help
usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-D SET_FORMAT] [SET]
Set/get the current date/time. With no SET shows the current date.
Default SET format is "MMDDhhmm[[CC]YY][.ss]", that's (2 digits each)
month, day, hour (0-23), and minute. Optionally century, year, and second.
Also accepts "@UNIXTIME[.FRACTION]" as seconds since midnight Jan 1 1970.
-d Show DATE instead of current time (convert date format)
-D +FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])
-r Use modification time of FILE instead of current date
-u Use UTC instead of current timezone
+FORMAT specifies display format string using strftime(3) syntax:
%% literal % %n newline %t tab
%S seconds (00-60) %M minute (00-59) %m month (01-12)
%H hour (0-23) %I hour (01-12) %p AM/PM
%y short year (00-99) %Y year %C century
%a short weekday name %A weekday name %u day of week (1-7, 1=mon)
%b short month name %B month name %Z timezone name
%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)
%N nanosec (output only)
%U Week of year (0-53 start sunday) %W Week of year (0-53 start monday)
%V Week of year (1-53 start monday, week < 4 days not part of this year)
%D = "%m/%d/%y" %r = "%I : %M : %S %p" %T = "%H:%M:%S" %h = "%b"
%x locale date %X locale time %c locale date/time
usuario207189