diff --git a/TableParser.py b/TableParser.py
index 311f7b9..d8d4802 100644
--- a/TableParser.py
+++ b/TableParser.py
@@ -52,9 +52,11 @@
 
                     timeSplit = hora.split(':')
 
-                    begins = datetime(year, month, day, int(timeSplit[0]), int(timeSplit[1]))
-                    begins = pytz.timezone(self.TIMEZONE).localize(begins)
-                    ends = begins + timedelta(minutes=durada)
+                    beginsDateTime = datetime(year, month, day, int(timeSplit[0]), int(timeSplit[1]))
+                    beginsDateTime = pytz.timezone(self.TIMEZONE).localize(beginsDateTime)
+                    begins = int(beginsDateTime.timestamp())
+                    endsDateTime = beginsDateTime + timedelta(minutes=durada)
+                    ends = int(endsDateTime.timestamp())
 
                     print(("Afegint " if db != None else "") + assignaturaRaw
                             + ", " + hora
diff --git a/cron-parse-tables.py b/cron-parse-tables.py
index 364ecf4..7ed1dee 100644
--- a/cron-parse-tables.py
+++ b/cron-parse-tables.py
@@ -2,30 +2,60 @@
 import configparser
 from TableParser import TableParser
 import datetime
+import sys
+import getopt
 
-config = configparser.ConfigParser()
-config.read('config.ini')
+def main(argv):
+    config = configparser.ConfigParser()
+    config.read('config.ini')
 
-db_host = config['db']['host']
-db_database = config['db']['database']
-db_user = config['db']['user']
-db_password = config['db']['password']
+    db_host = config['db']['host']
+    db_database = config['db']['database']
+    db_user = config['db']['user']
+    db_password = config['db']['password']
 
-connection_string = (
-    'DRIVER=MySQL ODBC 8.0 ANSI Driver;'
-    'SERVER=' + db_host + ';'
-    'DATABASE=' + db_database + ';'
-    'UID=' + db_user + ';'
-    'PWD=' + db_password + ';'
-    'charset=utf8mb4;'
-)
+    connection_string = (
+        'DRIVER=MySQL ODBC 8.0 ANSI Driver;'
+        'SERVER=' + db_host + ';'
+        'DATABASE=' + db_database + ';'
+        'UID=' + db_user + ';'
+        'PWD=' + db_password + ';'
+        'charset=utf8mb4;'
+    )
 
-db = pyodbc.connect(connection_string)
-db.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
-db.setencoding(encoding='utf-8')
+    db = pyodbc.connect(connection_string)
+    db.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
+    db.setencoding(encoding='utf-8')
 
-tomorrow = datetime.date.today() + datetime.timedelta(days=1)
+    try:
+        opts, args = getopt.getopt(argv, 'o:', ['offset='])
+    except getopt.GetoptError:
+        print('Usage: python cron-parse-tables.py -o <offset_in_days>')
+        print('    The offset is the day relative to today that wants to be')
+        print('    parsed. For instance, -1 is yesterday and 1 is tomorrow.')
+        sys.exit(2)
 
-parser = TableParser('https://fme-intranet.upc.edu/appsext/mrbs/web/day.php')
-for area in [2, 6]:
-    parser.parse(tomorrow.year, tomorrow.month, tomorrow.day, area, db)
+    offset = 1
+    for opt, arg in opts:
+        if opt in ('-o', '--offset'):
+            offset = arg
+        else:
+            print('Parameter \'' + opt + '\' not recognized.')
+            print('')
+            print('Run python cron-parse-tables.py to get help on how to use')
+            print('this script.')
+
+    offset = int(offset)
+
+    print('Parsejant les classes ' +
+        (('de fa ' if offset < 0 else 'de dins de ') +
+        str(abs(offset)) + (' dia' if abs(offset) == 1 else ' dies') if offset != 0 else 'd\'avui'))
+
+    tomorrow = datetime.date.today() + datetime.timedelta(days=offset)
+
+    parser = TableParser('https://fme-intranet.upc.edu/appsext/mrbs/web/day.php')
+    for area in [2, 6]:
+        parser.parse(tomorrow.year, tomorrow.month, tomorrow.day, area, db)
+
+if __name__ == "__main__":
+    main(sys.argv[1:])
