Sun Setting based on given time and date

Hi everyone. I am working with sun analysis tools in API and I need to set the sun position based on a specific time and date. I searched in commands and I could just found the option for defining the sun position based on the frame number. Is there any command for setting the sun position based on time and date?

and finally, In this method, I can get the sun direction for each day and time

def SunDirection ():
t=Transaction(doc, “Assigning the values”)
t.Start()
j=datetime.datetime.now()
Dt_kind=System.DateTimeKind.Local
specTime=System.DateTime.SpecifyKind(j,Dt_kind)
settings=view.SunAndShadowSettings
settings.SunAndShadowType = SunAndShadowType.StillImage
uidoc.RefreshActiveView()
doc.Regenerate()
e=settings.GetFrameAzimuth(settings.ActiveFrame)
print(specTime)
print(e180/(math.pi))
t.Commit()
return specTime, e
180/(math.pi)

I have written this function to get the sun Azimuth. the only problem is that the sun position does not update based on the given date and time and gets this info from the sun setting pannel in Revit. does anybody know the sun position can be updated?

@mhmesh
I did not look to much into it but the code I did might help you to get there
There is an issue, probably a know one, with the sun (physical geometry in the trajectory) that does not update in terms of location if you don’t ‘touch’ it. The trick I use is to set a parameter to a certain value in another transaction and then set it back to its previous value.

import clr

clr.AddReference('System')

import System

from pyrevit import DB, revit, script, HOST_APP

output = script.get_output()

# Close other output when launched several times

close_other_output = output.close_others(all_open_outputs=True)

doc = revit.doc

view = doc.ActiveView

uidoc = HOST_APP.uidoc

DT = System.DateTime.Now

with revit.Transaction ('Set sun Date and Time to Now'):

    settings_sun = view.SunAndShadowSettings

    settings_sun.StartDateAndTime = DT

    # or settings_sun.EndDateAndTime = DT

    # Make newly created view active

    uidoc.RequestViewChange(view)

    # Maybe overkill

    uidoc.RefreshActiveView()

    doc.Regenerate()

with revit.Transaction ('Touch and Go'):

    # as the physical sun does not seem to move even though the parameters are really passed through, a touch and go is mandatory to refresh its position in the active view

    sun_path_size = settings_sun.get_Parameter(DB.BuiltInParameter.VIEW_GRAPH_SUN_PATH_SIZE).AsInteger()

    temp_sun_path_size = sun_path_size

    param = settings_sun.Parameter[DB.BuiltInParameter.VIEW_GRAPH_SUN_PATH_SIZE]

    param.Set(10)

    param.Set(temp_sun_path_size)

print (view.Name)

print (DT)

print (param.AsInteger())

I hope that helped a bit

Sorry for my late reply. it is great and working as I expected. thank you so much