离线时获取系统国家/地区位置

时间:2018-03-21 18:54:45

标签: python date location

我希望接受日期输入到脚本中并遇到如何在用户打算2007年4月5日(或2007年5月4日)时区分040507 // 04052007和050407 // 05042007的难题。美国倾向于遵循第一种形式,而其他国家则倾向于第二种形式。

我知道在某些情况下我可以使用IP / GPS,但我正在寻找一种离线工作的方法,可能来自系统位置/语言?

我主要是在寻找Windows解决方案,但其他人肯定会在将来/向其他人提供帮助。

NB我不认为时区是一个不错的选择,因为同一时区的不同国家可以使用不同的惯例。

2 个答案:

答案 0 :(得分:1)

您始终可以使用getdefaultlocale()检查操作系统默认语言,并且可以使用它来指导您解析日期的方式:

>>>import locale
>>>locale.getdefaultlocale()
('en_US', 'cp1252')

这不太准确,因为无论我的计算机使用什么语言环境,我都会以相同的方式输入日期,但它可以为您提供一个起点。

答案 1 :(得分:1)

根据您的日期格式判断,我认为您的用户手动输入日期。不幸的是,地方与如何输入无关。我在美国,但更喜欢在全年输入我的约会。

一种简单的方法是强制标准或接受输入的方式和测试。

def test():
    while True:
        testdate = input()
        if testdate.isdigit() and len(testdate) == 6:
            #do something
            break
        elif testdate.isdigit() and len(testdate) == 8:
            #do something
            break
        else: 
            print("Please enter correct format")

这将检查以确保仅输入数字,然后检查长度以确定使用的格式。

您可以通过指定“ddmmyyyy”强制标准,并且只接受8位数输入。

如果我对如何给出日期有误,请告诉我,我会相应更新。

编辑:

如果要通过确定用户的位置来猜测用户的格式,可以使用语言环境模块。

import locale

print(locale.getlocale())

输出:

  

(' en_US',' UTF-8')

使用区域设置的另一种方法是检查区域设置的国际货币符号。

import locale

locale.setlocale(locale.LC_ALL, "")
print(locale.localeconv()['int_curr_symbol'])

输出:

  

USD

以下是货币代码列表:https://www.ibm.com/support/knowledgecenter/en/SSZLC2_7.0.0/com.ibm.commerce.payments.developer.doc/refs/rpylerl2mst97.htm