Ceci est le code que nous avons dans l'une de nos applications Web internes que nous utilisons pour time-tracking fins. Lorsque l'utilisateur entre une heure, la valeur de chaîne est passée à travers cette fonction, qui renvoie une structure de données de temps.
Il est écrit en javascript, et le code pourrait être directement porté sur python.
J'espère que cela aide un peu.
var ParseTime_NOW_MATCH = /^ *= *$/
var ParseTime_PLUS_MATCH = /^ *\+ *([0-9]{0,2}(\.[0-9]{0,3})?) *$/
var ParseTime_12_MATCH = /^ *([0-9]{1,2}):?([0-9]{2}) *([aApP])[mM]? *$/
var ParseTime_24_MATCH = /^ *([0-9]{1,2}):?([0-9]{2}) *$/
// ########################################################################################
// Returns either:
// {
// Error: false,
// HourDecimal: NN.NN,
// HourInt: NN,
// MinuteInt: NN,
// Format12: "SS:SS SS",
// Format24: "SS:SS"
// }
// or
// {
// Error: true,
// Message: "Error Message"
// }
function ParseTime(sTime)
{
var match;
var HH12;
var HH24;
var MM60;
var AMPM;
///////////////////////////////////////////////////////////////////////////////////////
if((match = ParseTime_NOW_MATCH.exec(sTime)) != null)
{
// console.log(match);
return {Error: true, Message: "Unsupported format"};
}
///////////////////////////////////////////////////////////////////////////////////////
else if((match = ParseTime_PLUS_MATCH.exec(sTime)) != null)
{
// console.log(match);
return {Error: true, Message: "Unsupported format"};
}
///////////////////////////////////////////////////////////////////////////////////////
else if((match = ParseTime_24_MATCH.exec(sTime)) != null)
{
// console.log("24");
// console.log(match);
HH24 = parseInt(match[1], 10);
MM60 = parseInt(match[2], 10);
if(HH24 > 23 || MM60 > 59)
{
return {Error: true, Message: "Invalid Hour or Minute (24)."};
}
else if(HH24 == 0)
{
HH12 = 12;
AMPM = 'AM';
}
else if(HH24 <= 11)
{
HH12 = HH24;
AMPM = 'AM';
}
else if(HH24 == 12)
{
HH12 = HH24;
AMPM = 'PM';
}
else
{
HH12 = HH24 - 12;
AMPM = 'PM';
}
}
///////////////////////////////////////////////////////////////////////////////////////
else if((match = ParseTime_12_MATCH.exec(sTime)) != null)
{
// console.log(match);
AMPM = ((match[3] == 'A' || match[3] == 'a') ? 'AM' : 'PM');
HH12 = parseInt(match[1], 10);
MM60 = parseInt(match[2], 10);
if(HH12 > 12 || HH12 < 1 || MM60 > 59)
{
return {Error: true, Message: "Invalid Hour or Minute (12)."};
}
else if(HH12 == 12 && AMPM == 'AM')
{
HH24 = 0;
}
else if(AMPM == 'AM')
{
HH24 = HH12;
}
else if(AMPM == 'PM')
{
HH24 = HH12 + 12;
}
}
///////////////////////////////////////////////////////////////////////////////////////
else
{
return {Error: true, Message: "Invalid Time Format."};
}
return {
Error : false,
HourDecimal : HH24 + (MM60/60),
HourInt : HH24,
MinuteInt : MM60,
Format12 : HH12 + ':' + (MM60 < 10 ? "0"+MM60 : MM60) + ' ' + AMPM,
Format24 : (HH24 < 10 ? "0"+HH24 : HH24) + ':' + (MM60 < 10 ? "0"+MM60 : MM60)
}
}
Désolé de nitpick, mais une milliseconde est 1/1000 de seconde, donc 3,55 secondes est en fait 450 millisecondes à court de 4 secondes. Vous ne savez pas comment vous en viendriez à 5, à moins que vous pensiez qu'une milliseconde était 1/60 de seconde? –
@John Y Aucun problème avec le nitpicking, merci de le remarquer :) – inerte