You are representing your local time in UTC format by putting in the timezone offset (-05:00 in my case).
I know. I said that. that’s why you need to have the timezone offset to define your local time in UTC format in terms of GMT. If there is no offset then it’s assumed to be local time. In the case that local time = GMT time then to make it clear that local time is also GMT when no offset is given then it’s customary per the ISO8601 standard to include at least the “Z” to signify that local time = GMT => it tells you unambiguously that local time (represented in UTC format) = GMT (represented in UTC format).
This all boils down to being a representation of local time in two different frames of reference. One is in relation to GMT (and needs to include the offset) and the other is assumed to be local time since it doesn’t include the offset.
Just wanted to say thanks for this thread, @finity. I find myself referring to it frequently. Maybe you should consider creating a version of it to put somewhere in the HA docs.
sorry, need some guidance please.
Im in the UK (So UTC+1 at the moment) and i have an attribute in my sensor thats showing as UTC.
So it shows as being 00:05 when it was actually 01:05
{{ states.vacuum.rover.attributes.clean_start }}
value = 2019-07-27 00:00:05
how do i change this value to add 60mintues to it, or is there more of a global setting that would automatically pass the correct value into the source data?
You need the sensor to include the time zone in the string then it will display correctly. Anything without an explicit time zone definition is treated as being in local time so the best solution is to ensure the sensor includes the TZ.
Hi, I’m trying to build an if-then test to get something done only when now() is not inside a specific time interval of the day. This is my most recent, but still failed attempt:
{%- set t1 = as_timestamp(now())| timestamp_custom('%H:%M') %}
{% if strptime(t1, '%H:%M') < strptime('09:30', '%H:%M') and
strptime(t1, '%H:%M') > strptime('12:30', '%H:%M') %}
Do_Something
{%- endif %}
You are of course absolutely right. Funny how I got stuck in my own mind-loop. I should have thought of that. Anyway, I solved it by using if not
But still, it puzzles me that I had to use a temporary varible (t1) in order to get HA to tolerate the syntax.
Yeah, I’m no expert at any of this. I spent the better part of 3 or 4 days working on the content of the first posts here to try to understand it. TBH, I still have to go back to my notes when working with the more complex stuff.
but technically I don’t think have to use a variable. You could just substitute the stuff after the “set t1 =” part into everywhere you have t1 in the rest of the template. but that would get really messy. it’s cleaner to use that variable.
and also to make it a bit simpler you didn’t have to convert now to a timestamp. You could have gone straight to a string then when you use strptime it would convert the string to a time object for the comparison:
{%- set t1 = now().strftime('%H:%M') %}
{% if strptime(t1, '%H:%M') < strptime('09:30', '%H:%M') or
strptime(t1, '%H:%M') > strptime('12:30', '%H:%M') %}
Do_Something
{%- endif %}
Interesting. But I tried to substitute everything after the “set t1=” directly into the if statement, but HA complained about token irregularities and what not.
I must say that I do find these things overly complex. And finding documentation without presumption that your are already a python or java programmer with 10 years experience, makes it even harder. Take for instance the strftime and strptime operators (I don’t even know if calling them operators is correct?), I assume that someone “made” up these two words with something logical in mind. So probably str means string, and time is of course obvious, but the letter ‘f’ and ‘p’ stuck in between there? What do those mean? It would have been nice to know. it makes it easier to remember if you know what meaning or words these letters represent… just a sigh
Anyway, thanks for your suggestion. I’ll try it later.For now, at least, it works as-is.
as far as the p & f I really don’t know where they came from but it helps me remember which is which using strftime = “string from time” and strptime = not string from time so it’s “time from string”.
That’s a good one
Thank you so much for your assistance. However, sometimes I do not understand the do’s and dont’s of the template editor. It fails on this one:
Thank you so much. You’ve yet again solved one of the great syntax mysteries.
( I wonder what pleasure the creator had in making things so complex and completely unlogical)
finity: could you have a look at “Chicken Eggs!” ??? - I think it needs your time wizzardry skills and I think I’m going to have to read this thread twice a day and practice for a month to get my head round this.
I don’t think it needs Phil’s “Sun Enhancement” just subtract one time from another, subtract a few more hours and then output as minutes.
Also I’m not sure that you noticed but I made the first posts able to be fully copied into the template editor so you can copy them over and play with them to get different results.
In milliseconds - 1544817447000 (which is another can of worms).
Yes, the time stated should be the local time and the bit on the end simply tells you the relationship of that time string to UTC.
Coming a bit late to this but the best way I found of visualizing this, is to think of time & date as a number. Wherever you are on the globe, everyone is at the same instantaneous number - the UNIX timestamp - UTC.
The number (or TZ) on the end of the string representation, tells you what that number string is relative to UTC (or GMT or Zulu time) where a minus is behind (midday is later) and plus is ahead (midday is earlier) than if you were on UTC.
So if your timezone is -5, you are 5 hours behind so when UTC is 19:00, local time to you is 14:00 but in ISO format that is 14:00-05:00 not 19:00-05:00
Without a timezone, the time & date string is always assumed to be local.
Would anyone have a way of explaining how to use the input_datetime component for comparison?
Specifically just the has_date: false/has_time: true usage.
When trying to use the timestamp attribute in this configuration, it only produces the number of seconds from midnight of the current day when used in templates which doesn’t play well with as_timestamp’s use of the Unix starting point.
I’m trying to use the time entry at the input_datetime component in the frontend to trigger an action everyday at that time.