0 votos

Cómo obtener la fecha de mañana y el número de la próxima semana para utilizarlos en Tasker

Basado en esta respuesta Estoy buscando una manera de cómo obtener la fecha de mañana y el número de la próxima semana para usar en Tasker app, Ejecutar el comando Shell .

Lo he intentado:

date -d '+1 day' +"%Y%m%d" y similares, pero todavía estoy recibiendo Error: 1 .

En el emulador de shell obtengo bad 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.

1voto

RefuX Puntos 328

Ya lo he resuelto, he tenido que aprender a usar Tasker un poco, la solución es un poco incómoda pero probablemente debería hacerse así en Tasker.

La variable más importante para estas manipulaciones de fechas en Tasker es una variable global %TIMES que contiene el tiempo actual en segundos - por lo que es un gran número entero largo.

Si se le añaden, por ejemplo, 30 días, hay que Establece la variable (con las matemáticas puestas) así:

%TIMES + (30 * 86400)

Mañana sí:

%TIMES + (1 * 86400)

El principal problema es que hay que convertir el valor en una cadena de fecha y hora formateada. Según tengo entendido, no hay ningún comando incorporado para ello en Tasker.

Para ello, es necesario crear un paso de tarea JavaScriptlet 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() &lt; 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 se insertan 2 pasos donde se establecen dos variables de entrada %par1 (contiene la fecha 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 conseguir la siguiente semana:

  • Ejecutar Shell date -d +"%Y" a %year
  • Ejecutar Shell date -d +"%V" a %week
  • Establece la variable %week a %week + 1 (Do Maths On)
  • Establece la variable %year a %year + 1 (Hacer matemáticas en) (Si %week > 52 )
  • Establece la variable %week a 1 (Si %week > 52 )
  • El yyyyww.htm de la semana siguiente puede escribirse entonces como %year%week.htm

0 votos

52*7 = 364; un año normal tiene 365 días y un año bisiesto tiene 366 días. Debido a esta discrepancia, independientemente de si se considera que la semana 1 es la primera semana completa o la primera semana con 4 días o más en el nuevo año, ocasionalmente habrá una semana 53.

1voto

Alex Baker Puntos 11

Dada una variable %mytimestamp establecido en una marca de tiempo de época, puede utilizarlo en su acción de shell:

date -d @%mytimestamp +%Y%m%d

Tenga en cuenta la @ antes de %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

0voto

Martin O'Keefe Puntos 51

Prueba esto:

mañana=$(( date +%s + 86400 ))

date -d @$tomorrow +%Y%m%d

enter image description here

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X