#!/usr/bin/env python3
#
#    changing the date code: add 1 day + 12 hours
#
#   for this conversion, read sequentially, no index file
#
#   set sequential = 0 for first search
#   set sequential > 0 subsequent searches

import pywgrib2_s
from datetime import datetime, timedelta

# date = 'YYYYMMDDHHMMSS'
# time = time variable as used by module datetime

def to_time(date):
#  'YYYYMMDDHHMMSS' -> time
    return datetime.strptime(date,"%Y%m%d%H%M%S")

def to_date(time):
#  time -> 'YYYYMMDDHHMMSS' 
    return time.strftime("%Y%m%d%H%M%S")


in_file='a.grb'
out_file='a_newdate.grb'

# for the first read, sequential = 0, for following reads, sequential > 0

sequential=0
while pywgrib2_s.inq(in_file, sequential=sequential, Matched=True, grib='@mem:0') == 1:
    meta=pywgrib2_s.matched[0]

    # get date code
    i=meta.find(":D=")
    date=meta[i+3:i+3+14]

    # add 1 day + 12 hours to date code
    time = to_time(date)
    time=time+timedelta(days=1,hours=12)
    date_new = to_date(time)

    s = pywgrib2_s.write(out_file,'@mem:0',1,time0=date_new)
    print(s," date: ",date,' ->', date_new)

    sequential = sequential + 1


print("converted ",sequential, "  fields")