Processing math: 100%

5 votos

Campo de cálculo de una única fecha y hora

Quiero campo para calcular un campo que se va a tener una tener la fecha y la hora (abajo a la segunda) y dos cartas después de (a ser asignado por el usuario).

Por ejemplo, si el registro fue creado el 8 de septiembre de 2016, a las 7:15 am y 03 segundos tendría este aspecto: 090816071503XX

Yo también necesitan ser único, aunque, en algunos casos este campo calculan que será realizado en más de 5000 registros. Haciendo un completo campo de calcular en tiempo real, esto significa que todos los 5000 registros se muestran al mismo tiempo. Así que necesito un código de campo calcular un "fake", pero realista a la vez (es decir, no puede tener la hora 25). No me importa que este tiempo es incorrecta, pero sí quiero que la fecha correcta.

Me imagino que esto es algo que puede ser escrito en Python?

Tengo una VBA (.cal) script, se puede cargar en el campo de la calculadora de calcular la fecha y la hora, pero como he dicho, tengo que devolver momentos únicos.

'enter your initials  
INIT="XX"  

'month string - add zero  
If LEN(DatePart ("m", Now (  ) ))=1 then  
    MO = "0"&DatePart ("m", Now (  ) )  
Else  
    MO = DatePart ("m", Now (  ) )  
end if  


'day string - add zero  
If LEN(DatePart ("d", Now (  ) ))=1 then  
    DA = "0"&DatePart ("d", Now (  ) )  
Else  
    DA = DatePart ("d", Now (  ) )  
end if  

'year string - two digits  
YR = RIght(DatePart ("YYYY", Now (  ) ),2)  

'HR string - two digits  
If LEN (DatePart ("h", Now (  ) ))=1 then  
    HR = "0"&DatePart ("h", Now (  ) )  
Else  
    HR = DatePart ("h", Now (  ) )  
End if  

'MN string - two digits  
If LEN (DatePart ("n", Now (  ) ))=1 then  
    MN = "0"&DatePart ("n", Now (  ) )  
Else  
    MN = DatePart ("n", Now (  ) )  
End if  

'SS string - two digits  
If LEN (DatePart ("s", Now (  ) ))=1 then  
    SS = "0"&DatePart ("s", Now (  ) )  
Else  
    SS = DatePart ("s", Now (  ) )  
End if  

6voto

steveax Puntos 316

La respuesta anterior funciona, pero parece un poco demasiado complicado. ¿Por qué no simplemente esto:

Bloque De Código:

import datetime
dateSet = set()

def set_date(timestamp, suffix):
    date = datetime.datetime.strptime(timestamp, "%m/%d/%Y %H:%M:%S")
    global dateSet

    while date in dateSet:
        date += datetime.timedelta(0,1)
    dateSet.add(date)
    return datetime.datetime.strftime(date, "%m%d%y%H%M%S{}".format(suffix)) 

Y la expresión:

set_date("09/16/2016 14:22:57", "MM")

Este impreso '091616142257MM' para mí. Es también digno de mención, si usted tiene una Fecha real de Campo, debe devolver un datetime.datetime() y puede omitir la conversión de la cadena de marca de tiempo con sólo usar datetime.datetime.strftime(date, "%m%d%Y%H%M%S{}".format(suffix)).

Aquí está la captura de pantalla:

enter image description here

EDITAR:

Puedo ver parte de la OP está pidiendo un tiempo único. Yo tomado de @Midavalo la respuesta que añadir el tiempo de delta para la hacen única.

5voto

Gavin Schulz Puntos 592

El uso de la calculadora de campo con python analizador:

En el Bloque de Código:

import datetime
initials = 'MM'
dateSet = set()

def set_date(thedate):
    def date_string(myDate):
        myYear = str(myDate.year)[2:]
        myMonth = str(myDate.month).zfill(2)
        myDay = str(myDate.day).zfill(2)
        myHour = str(myDate.hour).zfill(2)
        myMinute = str(myDate.minute).zfill(2)
        mySecond = str(myDate.second).zfill(2)
        return {'Year': myYear, 'Month': myMonth, 'Day': myDay, 'Hour': myHour, 'Minute': myMinute, 'Second': mySecond}

    global dateSet
    myDate = datetime.datetime.strptime(thedate, '%m/%d/%Y %H:%M:%S')

    dd = date_string(myDate)
    dateStr = "{0}{1}{2}{3}{4}{5}".format(dd['Month'], dd['Day'], dd['Year'], dd['Hour'], dd['Minute'], dd['Second'])

    while dateStr in dateSet:
        myDate += datetime.timedelta(0,1) 
        dd = date_string(myDate)
        dateStr = "{0}{1}{2}{3}{4}{5}".format(dd['Month'], dd['Day'], dd['Year'], dd['Hour'], dd['Minute'], dd['Second'])
    dateSet.add(dateStr)

    return "{}{}".format(dateStr, initials)

Y en la Expresión:

set_date('09/16/2016 14:22:57')

(donde 09/16/2016 14:22:57 es la fecha en la que desea agregar al campo)

Herramienta calcular Campo:

enter image description here

Resultado:

enter image description here

Esto le añade un segundo al tiempo si ya se ha utilizado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia 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