0 votes

Comment obtenir la date de demain et le numéro de la semaine prochaine à utiliser dans Tasker

Basé sur cette réponse, je recherche un moyen d'obtenir la date de demain et le numéro de la semaine suivante à utiliser dans l'application Tasker, Exécuter une commande Shell.

J'ai essayé :

date -d '+1 day' +"%Y%m%d" et des commandes similaires, mais je reçois toujours Erreur : 1.

Dans l'émulateur shell, j'obtiens mauvaise date '+1 day'

Impossible de trouver de référence ou de manuel sur les commandes shell Android.

Certains guides recommandent d'utiliser la variable %TIMES, mais je ne suis pas sûr de comment faire.

1voto

RefuX Points 328

J'ai compris, j'ai dû apprendre à utiliser un peu Tasker, la solution est un peu maladroite mais elle devrait probablement être faite de cette manière dans Tasker.

La variable la plus importante pour de telles manipulations de la date et de l'heure dans Tasker est une variable globale %TIMES qui contient l'heure actuelle en secondes - c'est donc un grand nombre entier.

Ajouter par exemple 30 jours à cela nécessite de Définir la variable (avec Mathématiques activées) comme suit :

%TIMES + (30 * 86400)

Demain est :

%TIMES + (1 * 86400)

Le problème principal est que vous devez convertir la valeur en une chaîne de caractères de date formatée. Tel que je l'ai compris, il n'existe pas de commande intégrée pour cela dans Tasker.

Vous devez créer une étape de tâche JavaScriptlet pour cela et coller là-bas le code de cette page :

        1340586441681
        1369445351826
        54
        getFormattedDate
        10
        2

            129
            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';
        }
    }
);
            45

            126
            %formatteddate

Avant cette étape Javascriptlet, insérez 2 étapes où vous définissez deux variables d'entrée %par1 (contient la date et l'heure en secondes de l'étape précédente) et %par2 (contient yyyymmdd - le format de date).

La chaîne de caractères de date formatée est alors disponible dans la variable %formatteddate.


Quant à obtenir la semaine suivante :

  • Exécuter Shell date -d +"%Y" vers %year
  • Exécuter Shell date -d +"%V" vers %week
  • Définir la variable %week sur %week + 1 (Calculer les mathématiques)
  • Définir la variable %year sur %year + 1 (Calculer les mathématiques) (Si %week > 52)
  • Définir la variable %week sur 1 (Si %week > 52)
  • La yyyyww.htm de la semaine suivante peut alors être écrite comme %year%week.htm

0 votes

52*7 = 364; une année normale a 365 jours et une année bissextile a 366 jours. En raison de cette disparité, que la première semaine complète ou la première semaine avec 4 jours ou plus de la nouvelle année soit considérée comme la semaine 1, il y aura parfois une semaine 53.

1voto

Konsolkongen Points 11

Étant donné une variable %mytimestamp définie sur un horodatage d'époque, vous pouvez l'utiliser dans votre action shell :

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

Remarquez le @ avant %mytimestamp


$ adb shell
$ date --version
toybox 0.7.4-android
$ date --help
usage: date [-u] [-r FICHIER] [-d DATE] [+FORMAT_AFFICHAGE] [-D FORMAT_DEF] [DEF]

Définit/récupère la date et l'heure actuelles. Sans DEF, affiche la date actuelle.

Le format DEF par défaut est "MMJJhhmm[[CC]AA][.ss]", c'est-à-dire (2 chiffres chacun)
mois, jour, heure (0-23), et minute. Optionnellement siècle, année, et seconde.
Accepte également "@TEMPS_UNIX[.FRACTION]" comme secondes depuis minuit le 1er janvier 1970.

-d      Affiche DATE au lieu de l'heure actuelle (convertit le format de la date)
-D      +FORMAT_DEF pour DEF ou -d (au lieu de MMJJhhmm[[CC]AA][.ss])
-r      Utilise le temps de modification de FICHIER au lieu de la date actuelle
-u      Utilise UTC au lieu du fuseau horaire actuel

+FORMAT_AFFICHAGE spécifie une chaîne de format d'affichage en utilisant la syntaxe de strftime(3) :

%% littéral %             %n saut de ligne           %t tabulation
%S secondes (00-60)       %M minute (00-59)         %m mois (01-12)
%H heure (0-23)           %I heure (01-12)          %p AM/PM
%y année courte (00-99)   %Y année                  %C siècle
%a nom court du jour de la semaine    %A nom du jour de la semaine     %u jour de la semaine (1-7, 1=lun)
%b nom court du mois       %B nom du mois              %Z nom du fuseau horaire
%j jour de l'année (001-366)   %d jour du mois (01-31)   %e jour du mois ( 1-31)
%N nanosecondes (uniquement en sortie)

%U Semaine de l'année (0-53 commence le dimanche)   %W Semaine de l'année (0-53 commence le lundi)
%V Semaine de l'année (1-53 commence le lundi, semaine < 4 jours n'est pas partie de cette année)

%D = "%m/%j/%y"    %r = "%I : %M : %S %p"   %T = "%H:%M:%S"   %h = "%b"
%x date locale     %X heure locale           %c date/heure locale

0voto

christ song Points 1

Essayez ceci :

demain=$(( date +%s + 86400 ))

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

entrer la description de l'image ici

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X